Printemps de Sécurité - N'est visible WebSecurityExpressionHandler exemple peut être trouvé dans le contexte de l'application
Je vais avoir des problèmes d'affichage d'un lien de déconnexion dans une page JSP seulement si l'utilisateur est authentifié. Ici est l'exception que j'ai à cette ligne de la page JSP:
<sec:authorize access="isAuthenticated()">
Exception:
Stacktrace:
....
root cause
javax.servlet.jsp.JspException: No visible WebSecurityExpressionHandler instance could be found in the application context. There must be at least one in order to support expressions in JSP 'authorize' tags.
org.springframework.security.taglibs.authz.AuthorizeTag.getExpressionHandler(AuthorizeTag.java:100)
org.springframework.security.taglibs.authz.AuthorizeTag.authorizeUsingAccessExpression(AuthorizeTag.java:58)
Voici mon application-context-Security.xml:
<http auto-config='true' >
<intercept-url pattern="/user/**" access="ROLE_User" />
<logout logout-success-url="/hello.htm" />
</http>
<beans:bean id="daoAuthenticationProvider"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<beans:property name="userDetailsService" ref="userDetailsService" />
</beans:bean>
<beans:bean id="authenticationManager"
class="org.springframework.security.authentication.ProviderManager">
<beans:property name="providers">
<beans:list>
<beans:ref local="daoAuthenticationProvider" />
</beans:list>
</beans:property>
</beans:bean>
<authentication-manager>
<authentication-provider user-service-ref="userDetailsService">
<password-encoder hash="plaintext" />
</authentication-provider>
</authentication-manager>
Je comprends que je pourrais utiliser-expression="true" dans le http tag, mais cela signifie que je dois utiliser l'expression dans l'ordonnée à l'origine-les balises d'url et dans le code java. Est-il une solution?
- Une autre observation. Le
daoAuthenticationProvider
etauthenticationManager
dans votre configuration ne sont pas utilisées.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez les ajouter une à votre contexte d'application
mais la façon la plus simple est juste de permettre à des expressions dans votre
<http>
de configuration, et on le fera pour vous. Cela signifie seulement que vous avez à utiliser des expressions à l'intérieur de ce bloc, pas dans du code Java tels que la méthode@Secured
annotations.