février
2009
Bonjour à tout le monde,
Pour mon premier billet, j’ai décidé de parler d’un bug que j’ai rencontré en développant une application sous Websphere Application Server d’IBM.
Au sein d’une servlet, si l’on souhaite connaître l’adresse IP ou le nom de l’hôte du serveur sur lequel le client écoute, il existe les 2 méthodes suivantes :
HttpServletRequest#getLocalAddress()
Si l’on attaque la servlet en utilisant une adresse du type : http://localhost:9080, nous verrons comme nom d’hôte « localhost » alors que si l’on attaque la servlet en utilisant une adresse du type : http://nomordi:9080, nous verrons comme nom d’hôte « nomordi ». Ces méthodes utilisent en fait les noms utilisés lorsque le client envoie la requête HTTP.
Malheureusement, les méthodes getLocalName() et getLocalAddress() sont inversées dans WAS 6.0 et sont dans le bonne ordre sur WAS 6.1.
L’effet étant que le code fonctionnait en développement (WAS 6.0 avec du code volontairement erroné par rapport aux spécifications de HttpServletRequest) mais ne marchait plus en production (WAS 6.1).