Bonjour à tous,
Comme expliqué dans le titre de mon message, j'ai du mal à faire fonctionner Spring Security...
J'ai suivi des articles de James Ward et Jettro Coenradie mais il est possible que j'ai loupé quelque chose.
Ce que je ne comprend absolument pas c'est que j'ai testé ça sur un projet fake juste avant d'attaquer le "vrai" projet et ça semblait fonctionner. J'ai vérifié mes fichiers de config et ils sont point pour point identiques en ce qui concerne spring security.
Je vous donnes les passages croustillants
Dans mon web.xml :
Dans mon applicationContext.xml :
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 <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/applicationContext.xml</param-value> </context-param> ... <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> ... <servlet> <servlet-name>Spring MVC Servlet Dispatcher</servlet-name> <display-name>Spring MVC Servlet Dispatcher</display-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/config/webApplicationContext.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
Et dans mon webApplicationContext.xml ceci :
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 <security:global-method-security secured-annotations="enabled" jsr250-annotations="enabled" /> <security:http entry-point-ref="preAuthenticatedEntryPoint"> <security:anonymous enabled="false"/> </security:http> <bean id="preAuthenticatedEntryPoint" class="org.springframework.security.web.authentication.Http403ForbiddenEntryPoint"/> <security:authentication-manager> <security:authentication-provider> <security:user-service> <security:user name="arnaud" password="arnaud" authorities="ROLE_USER"/> </security:user-service> </security:authentication-provider> </security:authentication-manager>
Plus ça dans chacun de mes bean service :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <flex:message-broker> <flex:secured /> </flex:message-broker>
J'ai tout d'abord essayé de remplacer ce dernier bout de code par des annotations @Secured("ROLE_USER"), ce qui n'a pas fonctionné, c'est pour ça que j'ai mis en place les tags security:intercept-methods et security:protect dans mes beans.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 <security:intercept-methods> <security:protect method="*" access="ROLE_USER" /> </security:intercept-methods>
C'est là que les problèmes arrivent... Dans mon premier projet fake, lorsque je lance mon application flex (un simple datagrid qui récupère une liste de produits), la sécurité fait son travail puisque la récupération échoue !
Dans mon second projet, le vrai donc, j'ai une erreur au déploiement dans tomcat, me disant que "*" n'est pas un nom valide de méthode.
J'ai essayé avec "findAll", qui est le nom de la méthode appelée, pareil, et j'ai remarqué qu'il me demandait le FQN.name...
Donc j'ai mis <security:protect method="com.blablabla.UserService.findAll" access="ROLE_USER" />
A ce moment là, plus d'erreur de déploiement, mais lorsque je lance l'appli flex, mes users sont chargés dans le datagrid
Soit j'ai le nez complètement dedans et je n'y vois plus rien, soir c'est une erreur fourbe, mais là je commence à devenir chèvre !
Help please![]()
Partager