Подтвердить что ты не робот

Не удалось проверить роль в Spring Безопасность для шаблона URL

Я использую 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'   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)

Корневая причина:

org.springframework.expression.spel.SpelEvaluationException: EL1008E: (pos 0): свойство или поле 'ROLE_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.evaluateAsBoolean(ExpressionUtils.java:11)   org.springframework.security.web.access.expression.WebExpressionVoter.vote(WebExpressionVoter.java:34)

Любые указатели на них очень ценятся.

4b9b3361

Ответ 1

У вас есть пара опечаток. В первой строке перехвата-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')" />

Ответ 2

что происходит, так это то, что официальная документация по безопасности spring содержит приведенные вами примеры:

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

но вы должны надевать

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