无法验证url模式的Spring安全性中的角色
我使用的是spring security 3.1.7.RELEASE和spring 3.2.13.RELEASE 我的spring-security.xml中有如下条目:无法验证url模式的Spring安全性中的角色,spring,spring-mvc,spring-security,spelevaluationexception,Spring,Spring Mvc,Spring Security,Spelevaluationexception,我使用的是spring security 3.1.7.RELEASE和spring 3.2.13.RELEASE 我的spring-security.xml中有如下条目: <http auto-config="true" use-expressions="true"> <intercept-url pattern=".*admin.htm" access="hasRole(ROLE_ADMIN)" /> <intercept-url pattern
<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')" />
当我尝试点击url/siteadmin/cleancache.htm时,我得到以下异常:
java.lang.IllegalArgumentException:计算表达式失败
“角色管理”
org.springframework.security.access.expression.ExpressionUtils.evaluatesBoolean(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.decise(AffirmativeBased.java:62)
根本原因:
org.springframework.expression.spel.SpelEvaluationException:
EL1008E:(位置0):在上找不到属性或字段“ROLE\u ADMIN”
类型的对象
'org.springframework.security.web.access.expression.WebSecurityExpressionRoot'
-也许不公开?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.evaluatesBoolean(ExpressionUtils.java:11)
org.springframework.security.web.access.expression.WebExpressionVoter.vote(WebExpressionVoter.java:34)
非常感谢您在同一页上的任何提示。您有几个打字错误。第一行截取url缺少角色_ADMIN周围的单引号,第二行缺少hasRole。应该是
<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')" />
发生的事情是,security spring的官方文档提供了您放置的示例:
<Intercept-url pattern = "/ siteadmin / *. Htm" access = "ROLE_ADMIN" />
但是你应该穿上
<Intercept-url pattern = ". * Admin.htm" access = "hasRole ('ROLE_ADMIN')" />
同意的原因是之前我没有使用任何工作正常的表达式。因此,我没有一下子改变整个xml,而是想先用几个URL来测试这个方法,这就是我面临的问题。没有问题,我过去也做过类似的事情,我也是also@KarthikeyanVaithilingam为什么这里的spring文档会出错?@JasonKrs我不是发布这个答案的人,我只是编辑了它。@Rubens我有同样的问题,但你的答案没有解决它。为什么这里的spring文档是错误的?