Spring Security Taglibs控制语句

时间:2010-05-17 11:08:12

标签: spring-security

有没有办法用Spring Security taglib实现控制语句?

目前我们只能检查用户是否有角色...

<security:authorize access="hasRole('ROLE_ADMIN')">
   // display something
</security:authorize>

别的怎么样?

3 个答案:

答案 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来自定义评估上下文的创建(然后您可以添加自己的方法和变量)。