有没有办法用Spring Security taglib实现控制语句?
目前我们只能检查用户是否有角色...
<security:authorize access="hasRole('ROLE_ADMIN')">
// display something
</security:authorize>
别的怎么样?
答案 0 :(得分:16)
问题是陈旧的,但无论如何......
您可以将标记评估的结果存储到变量中(至少在版本3.1中),然后在标准if/else
构造中使用它。我认为这比以前的解决方案更有用。
<security:authorize access="hasRole('ROLE_ADMIN')" var="isAdmin" />
<c:choose>
<c:when test="${isAdmin}">superuser</c:when>
<c:otherwise>ordinary user</c:otherwise>
</c:choose>
答案 1 :(得分:5)
如果您错过了已接受答案的评论。以下是如何从<security:authorize>
<security:authorize access="hasRole('ROLE_ADMIN')">
// IF -- display something
</security:authorize>
<security:authorize access="!hasRole('ROLE_ADMIN')">
// ELSE -- display something
</security:authorize>
注意其他条件中的!
not语句
致@Blake
答案 2 :(得分:2)
access
属性的值是SpEL表达式,针对WebSecurityExpressionRoot
进行评估,因此您可以使用其所有方法和所有SpEL语法。
此外,您可以通过将自定义WebSecurityExpressionHandler
声明为bean来自定义评估上下文的创建(然后您可以添加自己的方法和变量)。