Bonjour,

J'ai une application web sécurisé par mot de passe DIGEST MD5. Lorsque j'accède à ma servlet via Firefox, il me demande le login et mot de passe et on voit bien dans l'entête de la requête que le mot de passe n'est pas passé en clair (il y a le paramètre Authorization avec nonce).

J'essaie d'appeler cette servlet par du code Java mais je reçois toujours une erreur 401 "La requête nécessite une authentification HTTP ()".

Voilà mon code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
GetMethod httpMethode = new GetMethod("http://localhost:8080/portail-raster-service/rasterServlet?");
httpMethode.setDoAuthentication( true );
 
HttpClient client = new HttpClient();
client.getState().setCredentials(
	new AuthScope("http://localhost:8080", 8080, null, "MD5"),
	new UsernamePasswordCredentials("envol", "motdepasse")
);
 
client.executeMethod(httpMethode);
 
if(httpMethode.getStatusCode() != HttpStatus.SC_OK) {
   System.out.println(httpMethode.getResponseBodyAsString());
}
else {
   System.out.println(httpMethode.getResponseBodyAsString());
}
J'ai essayé d'envoyer le mot de passe crypter avec la méthode suivante mais ça ne fonctionne pas mieux :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
	public static String getEncodedPassword(String key) {
		byte[] uniqueKey = key.getBytes();
		byte[] hash = null;
		try {
			hash = MessageDigest.getInstance("MD5").digest(uniqueKey);
		} catch (NoSuchAlgorithmException e) {
			throw new Error("no MD5 support in this VM");
		}
		StringBuffer hashString = new StringBuffer();
		for ( int i = 0; i < hash.length; ++i ) {
			String hex = Integer.toHexString(hash[i]);
			if ( hex.length() == 1 ) {
				hashString.append('0');
				hashString.append(hex.charAt(hex.length()-1));
			} else {
				hashString.append(hex.substring(hex.length()-2));
			}
		}
		System.out.println(hashString.toString());
		return hashString.toString();
	}
Au niveau de mon web.xml, j'ai déclaré :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
	<security-constraint>
		<display-name>Sécurité sous Tomcat</display-name>
 
		<web-resource-collection>
		<web-resource-name>Ressource protégée</web-resource-name>
		<url-pattern>/*</url-pattern>
		<http-method>GET</http-method>
		<http-method>POST</http-method>
		</web-resource-collection>
 
		<auth-constraint>
		<role-name>envol</role-name>
		</auth-constraint>
 
	</security-constraint>
 
	<login-config>
		<auth-method>DIGEST</auth-method>
		<realm-name>Authentification pour Tomcat</realm-name>
	</login-config>
 
	<!-- Rôles utilisés dans l'application -->
	<security-role>
	  <description>Administrateur</description>
	  <role-name>envol</role-name>
	</security-role>
Et dans tomcat-users.xml :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<role rolename="envol"/>
<user password="motdepasse" roles="envol" username="envol"/>
Merci de votre aide !
WwAvE