Salut,
J'ai crée un petit projet de test pour essayer de faire une appli web avec authentification suivant un annuaire ldap, mais ça ne marche pas.
Le problème étant qu'il n'y aucune prise en compte des paramètres de sécurité, c'est à dire que je peux accéder à toute les pages de mon appli comme si de rien n'était.
C'est un projet de test, donc il y a pas grand chose, et je vais tout mettre histoire de passer à coté de rien.
Alors j'ai juste trois jsp (identification, error, et test), test étant la ressource à accéder une fois qu'on est identifié. J'ai pas fait de servlet parceque j'ai la flemme & que c'est juste un test.
error.jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<%
	response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
	response.setHeader("Pragma", "no-cache"); //HTTP 1.0
	response.setDateHeader("Expires", 0); //prevents caching at the proxy server
%>
</head>
<body>
<h1>erreur</h1>
</body>
</html>
identification.jsp :
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
28
<html>
<head>
<%
	response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
	response.setHeader("Pragma", "no-cache"); //HTTP 1.0
	response.setDateHeader("Expires", 0); //prevents caching at the proxy server
%>
</head>
<body>
 <form method="POST" action="j_security_check">
    <table>
      <tr>
        <td>Login :</td>
        <td><input type="text" name="j_username"></td>
      </tr>
      <tr>
        <td>Mot de passe :</td>
        <td><input type="password" name="j_password"></td>
      </tr>
      <tr>
        <td><input type="submit" value="Entrer"></td>
        <td><input type="reset" value="Annuler"></td>
      </tr>
    </table>
  </form>
 
</body>
</html>
test.jsp :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
<html>
<head>
<%
	response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
	response.setHeader("Pragma", "no-cache"); //HTTP 1.0
	response.setDateHeader("Expires", 0); //prevents caching at the proxy server
%>
</head>
<body>
<h1>blabla</h1>
</body>
</html>
Ensuite les fichiers de conf :
web.xml (complet)
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
28
29
30
31
32
33
34
35
36
37
<web-app>
 <security-constraint>
		<display-name>Tomcat Server Configuration Security 
			Constraint</display-name>
		<web-resource-collection>
			<web-resource-name>Protected Area</web-resource-name>
			<!-- Define the context-relative URL(s) to be protected -->
			<url-pattern>/*</url-pattern>
			<http-method>GET</http-method>
			<http-method>POST</http-method>
		</web-resource-collection>
		<auth-constraint>
			<role-name>*</role-name>
		</auth-constraint>
		<user-data-constraint>
			<transport-guarantee>CONFIDENTIAL</transport-guarantee>
		</user-data-constraint>
 </security-constraint>
	<!-- Login configuration uses form-based authentication -->
 <login-config>
		<auth-method>FORM</auth-method>
		<realm-name>Form-Based Authentication
			</realm-name>
		<form-login-config>
			<form-login-page>/identification.jsp</form-login-page>
			<form-error-page>/error.jsp</form-error-page>
		</form-login-config>
 </login-config>
 <!-- Security roles referenced by this web application -->
 <security-role>
		<!--
		<description> The role that is required to log in to the 
		       Administration Application </description>
		-->
		<role-name>*</role-name>
 </security-role>
</web-app>
conf.xml (la partie intéressante)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 <Realm   className="org.apache.catalina.realm.JNDIRealm" debug="99"
	connectionURL="ldap://XX.X.XX.XXX:389"
	userBase="ou=XXX,dc=XXXX,dc=XX"
	userSubtree="true"
	userSearch="(uid={0})"
 />
Ps : c'est la première fois que je me sers de ldap & de tomcat pour une identification, normalement je fais ça directement dans mon code métier via une base accessible par des requêtes sql.
J'ai tenté de remplir le conf.xml correctement, avec ces infos, fournies par mon chef, mais je me demande si la configuration est bien faite (même si ce n'est qu'un problème accessoire, puisque je devrais tout de même tomber sur la page de login)
Ici les infos fournies :
voici le query que on utilise

ldap://XX.X.XX.XXX/DC=XXX,DC=XXX?XXX?XXX?(objectClass=XXX)
Un dernier point, quand je me rend sur ma page de login manuellement, en tapant son adresse dans la barre de naviguation, et que je valide le formulaire, je tombe sur une page d'erreur type
Etat HTTP 404 - /ldap_test/j_security_check

type Rapport d'état

message /ldap_test/j_security_check

description La ressource demandée (/ldap_test/j_security_check) n'est pas disponible.
Voila, j'ai fini mon pavé, si quelqu'un pouvait jeter un coup d'oeil je lui en serais très reconnaissant.
Merci d'avance.
Bdloul