J'utilise la sécurité Spring 3.1.7.RELEASE avec Spring 3.2.13.RELEASE.
J'ai une entrée dans mon spring-security.xml comme suit:
<http auto-config="true" use-expressions="true">
<intercept-url pattern=".*admin.htm" access="hasRole(ROLE_ADMIN)" />
<intercept-url pattern="/siteadmin/*.htm" access="ROLE_ADMIN" />
<intercept-url pattern="/siteadmin/cleancache.htm" access="hasRole('ROLE_ADMIN')" />
Lorsque j'essaie d'appuyer sur url /siteadmin/cleancache.htm, j'obtiens l'exception suivante:
Java.lang.IllegalArgumentException: Échec de l'évaluation de l'expression 'ROLE_ADMIN' org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean (ExpressionUtils.Java:13) org.springframework.security.web.access.expression.WebExpressionVoterExpressionVoterExpression .Java: 34) org.springframework.security.web.access.expression.WebExpressionVoter.vote (WebExpressionVoter.Java:18) org.springframework.security.access.vote.AffirmativeBased.decide (AffirmativeBased.Java:62)
Cause première:
org.springframework.expression.spel.SpelEvaluationException: EL1008E: (pos 0): la propriété ou le champ 'ROLE_ADMIN' est introuvable sur l'objet de type 'org.springframework.security.web.access.expression.WebSecurityExpressionRoot' - peut-être pas public? org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty (PropertyOrFieldReference.Java:214) org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal (PropertyOrFieldReference. PropertyOrFieldReference.getValueInternal (PropertyOrFieldReference.Java:78) org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue (SpelNodeImpl.Java:102) org.springframework.expression.spel.standard.SVelExpress org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean (ExpressionUtils.Java:11) org.springframework.security.web.access.expression.WebExpressionVoter.vote (WebExpressionVoter.Java:34)
Tous les pointeurs sur ceux-ci sont très appréciés.
Vous avez quelques fautes de frappe. La première ligne d'interception-url manque des guillemets simples autour de ROLE_ADMIN et la deuxième ligne est manquante de hasRole. Ça devrait être
<http auto-config="true" use-expressions="true">
<intercept-url pattern=".*admin.htm" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/siteadmin/*.htm" access="hasRole('ROLE_ADMIN')" />
<intercept-url pattern="/siteadmin/cleancache.htm" access="hasRole('ROLE_ADMIN')" />
ce qui se passe, c'est que la documentation officielle de security spring apporte les exemples que vous avez placés:
<Intercept-url pattern = "/ siteadmin / *. Htm" access = "ROLE_ADMIN" />
mais tu devrais mettre
<Intercept-url pattern = ". * Admin.htm" access = "hasRole ('ROLE_ADMIN')" />