Spring安全标记:授权访问多个参数

时间:2017-11-03 13:04:29

标签: java spring-security

在JSP中,我需要通过Spring Security标签提供受限访问。这个想法是允许访问具有ADMIN角色的用户或者访问principal.username等于模型参数' email'的用户。标签看起来像这样:

<sec:authorize access="(principal.username).equals(${user.email}) || hasRole('ADMIN')">

由于未知原因,它失败了。例外:

org.springframework.expression.spel.SpelParseException: Expression [(principal.username).equals(picard@gmail.com) || hasRole('ADMIN')] @34: EL1043E: Unexpected token. Expected 'rparen())' but was 'bean_ref(@)'

我不明白为什么SPEL会失败,因为在控制器中类似的规则可以正常运行:

@PreAuthorize("(principal.username).equals(#user.email) || hasRole('ADMIN')")

我应该在标签中更改什么?

1 个答案:

答案 0 :(得分:0)

解决方案有点难看,但它有效

<sec:authorize access="isAuthenticated()">
        <sec:authentication property="principal.username" var="username"/>
        <sec:authentication property="principal.authorities" var="auth"/>
        <c:if test="${username.equals(user.email) || auth.iterator().next().toString().equals('ROLE_ADMIN')}">