tutorial español ejemplos con cerrar spring spring-mvc spring-security spelevaluationexception

español - spring security rest



No se puede validar el rol en Spring Security para el patrón de url (2)

Estoy usando la seguridad de primavera 3.1.7.RELEASE con la primavera 3.2.13.RELEASE.

Tengo entrada en mi spring-security.xml de la siguiente manera:

<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'')" />

Cuando intento presionar url /siteadmin/cleancache.htm recibo la siguiente excepción:

java.lang.IllegalArgumentException: no se pudo evaluar la expresión ''ROLE_ADMIN'' org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean (ExpressionUtils.java:13) org.springframework.security.web.access.expression.WebExpressionVoter.vote (WebExpressionVoter .java: 34) org.springframework.security.web.access.expression.WebExpressionVoter.vote (WebExpressionVoter.java:18) org.springframework.security.access.vote.AffirmativeBased.decide (AffirmativeBased.java:62)

Causa principal:

org.springframework.expression.spel.SpelEvaluationException: EL1008E: (pos 0): No se puede encontrar la propiedad o campo ''ROLE_ADMIN'' en el objeto del tipo ''org.springframework.security.web.access.expression.WebSecurityExpressionRoot'' - ¿quizás no es público? org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty (PropertyOrFieldReference.java:214) org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal (PropertyOrFieldReference.java:85) org.springframework.expression.spel.ast. PropertyOrFieldReference.getValueInternal (PropertyOrFieldReference.java:78) org.springframework.expression.spel.ast.SpelNodeImpl.getTypedValue (SpelNodeImpl.java:102) org.springframework.expression.spel.standard.SpelExpression.getValue (SpelExpression.java:98) org.springframework.security.access.expression.ExpressionUtils.evaluateAsBoolean (ExpressionUtils.java:11) org.springframework.security.web.access.expression.WebExpressionVoter.vote (WebExpressionVoter.java:34)

Cualquier puntero en el mismo es muy apreciado.


Tienes un par de errores tipográficos. A la primera línea de intercepción de url le faltan comillas simples alrededor de ROLE_ADMIN y a la segunda línea le falta hasRole. Debería ser

<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'')" />


lo que sucede es que la documentación oficial de la primavera de seguridad trae los ejemplos que usted colocó:

<Intercept-url pattern = "/ siteadmin / *. Htm" access = "ROLE_ADMIN" />

pero deberías ponerte

<Intercept-url pattern = ". * Admin.htm" access = "hasRole (''ROLE_ADMIN'')" />