Bonjour à tous. Je travaille sur une application web Java à l'aide des frameworks JSF+Spring+Hibernate. J'ai ajouté Spring Security à mon application pour pouvoir gérer l'authentification des utilisateurs. Seulement malgré les règles d'interception définies l'authentification ne se fait pas toujours pour l'accès à certaines pages. J'ai par défaut une session "Anonymous" qui n'a pas accès à toutes les pages, mais pourtant il arrive parfois qu'en cliquant sur un lien qui devrait provoquer une demande d'authentification il ne se produise rien et l'utilisateur anonyme accède à la page qui devrait lui être interdite.
De plus les URLs des pages sont à chaque fois celle de la page précédente et ça fausse l'application des règles d'interception.
dans mon fichier "application-context.xml" voici la configuration utilisée pour Spring security:
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
<sec:authentication-provider>
 
		<sec:jdbc-user-service data-source-ref="dataSource"
			users-by-username-query="SELECT USERNAME, PASSWORD, ID FROM employe WHERE USERNAME = ?"
			authorities-by-username-query="SELECT USERNAME,ROLE
 FROM authorities WHERE USERNAME = ?" />
 
		<sec:password-encoder hash="sha">
			<sec:salt-source user-property="username"/>
		</sec:password-encoder>
	</sec:authentication-provider>
 
	<sec:http auto-config="true" create-session="always" access-denied-page="/denied.jsf">
		<sec:intercept-url pattern="/authentification.jsf"
			filters="none" />
		<sec:intercept-url pattern="/**/layer1/**"
			access="ROLE_ADMIN" />
		<sec:intercept-url pattern="/**/layer3/**"
			access="ROLE_USER, ROLE_ADMIN" />
		<sec:intercept-url pattern="/**/layer2/**"
			access="ROLE_USER, ROLE_ADMIN, ROLE_ANONYMOUS"  />
 
		<sec:intercept-url pattern="/**/*.js"
			access="ROLE_ADMIN, ROLE_USER, ROLE_ANONYMOUS" />		
 
		<sec:anonymous />
		<sec:form-login login-page="/authentification.jsf"
			authentication-failure-url="/loseauth.jsf" default-target-url="/index.jsf" />
		<sec:logout logout-success-url="/index.jsf" />
 
 
	</sec:http>
Le dossier "WebContent" contient des pages dans 3 sous dossiers:
-layer1: seulement dédié au rôle administrateur
-layer2: accessible à tous
-layer3: accessible aux utilisateurs authentifiés et à l'administrateur

Dans le "web.xml" voila la configuration du filtre:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<filter>
		<filter-name>springSecurityFilterChain</filter-name>
		<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>springSecurityFilterChain</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
J'ignore ce qui fait défaut dans la configuration, de plus le Logout est souvent indisponible lorsqu'on se trouve dans une page incluse dans l'un des dossiers. Si vous pouviez me donner quelques idées ça m'aiderait beaucoup, merci.