在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')")
我应该在标签中更改什么?
答案 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')}">