2010-11-16 19 views
1

J'écris un AccessDecisionVoter personnalisé qui autorisera l'accès à certaines ressources uniquement si l'adresse distante de la requête est trouvée dans une liste d'adresses IP autorisées. Toutefois, la valeur de l'adresse distante renvoyée par WebAuthenticationDetails.getRemoteAddress() est dans un format qui semble être Ipv6. Lors de l'exécution de mon application locale, voici ce qui est renvoyée par la méthode ci-dessus:Question concernant la valeur renvoyée par WebAuthenticationDetails.getRemoteAddress()

0:0:0:0:0:0:0:1%0 

Je stocker l'adresse autorisée dans une liste délimitée par des virgules dans un fichier de propriétés. La liste est analysée et chaque adresse autorisée est comparée à l'adresse distante, mais comme je n'ai aucune idée de la manière de traduire une adresse Ipv4 en adresse Ipv6, cette comparaison échouera toujours.

Est-ce que la valeur est toujours renvoyée par WebAuthenticationDetails.getRemoteAddress() ou est-ce que je vois cela uniquement parce que je l'exécute localement?

Existe-t-il un moyen de convertir cette chaîne en une chaîne Ipv4?

Existe-t-il un moyen pour que la méthode en question retourne une chaîne Ipv4 à la place?

Merci!

Répondre

3

Vous ne pouvez pas convertir une adresse IPv6 en adresse IPv4. Les représentent deux protocoles différents. L'adresse de getRemoteAddress() sera dans un format en fonction du protocole utilisé pour créer la demande à la webapp. Je suppose que vous ne voyez l'adresse IPv6 que lorsque vous utilisez l'application localement. 0:0:0:0:0:0:0:1 est l'adresse de localhost, qui est la même que 127.0.0.1 dans IPv4. Je pense que vous devriez simplement ajouter cette adresse IPv6 à la liste des adresses IP autorisées.

+0

Merci chkal, je vais certainement ajouter cette adresse à la liste autorisée. – richever