23

我正在使用 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="/siteadmin/*.htm" access="ROLE_ADMIN" />
    <intercept-url pattern="/siteadmin/cleancache.htm" access="hasRole('ROLE_ADMIN')" />

当我尝试点击 url /siteadmin/cleancache.htm 我得到以下异常:

java.lang.IllegalArgumentException:无法评估表达式'ROLE_ADMIN' .java:34) org.springframework.security.web.access.expression.WebExpressionVoter.vote(WebExpressionVoter.java:18) org.springframework.security.access.vote.AffirmativeBased.decide(AffirmativeBased.java:62)

根本原因:

org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 0): 在“org.springframework.security.web.access.expression.WebSecurityExpressionRoot”类型的对象上找不到属性或字段“ROLE_ADMIN” - 也许不公开?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。

任何关于相同的指针都受到高度赞赏。

4

2 回答 2

43

你有几个错别字。第一个 intercept-url 行缺少 ROLE_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')" />
于 2015-02-11T16:34:49.273 回答
6

发生的事情是security spring的官方文档带来了您放置的示例:

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

但你应该穿上

<Intercept-url pattern = ". * Admin.htm" access = "hasRole ('ROLE_ADMIN')" />
于 2016-05-31T11:31:34.100 回答