2010-05-17 66 views
7

有沒有一種方法可以用Spring Security taglibs實現控制語句?Spring Security Taglibs控制語句

目前,如果用戶有一定的作用,我們只能檢查...

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

怎麼回事?

回答

2

access屬性的值是SpEL表達式,根據WebSecurityExpressionRoot進行評估,因此您可以使用其所有方法和所有SpEL語法。

您還可以通過將自定義WebSecurityExpressionHandler聲明爲bean(然後您可以添加自己的方法和變量)來自定義評估上下文的創建。

+7

我使用以下方法來模擬控制語句 <安全:授權訪問= 「hasRole( 'ROLE_ADMIN')」> 得到COM管理員 <安全:授權訪問= 「!hasRole('ROLE_ADMIN')」>> 沒有管理員 Blake 2010-05-18 04:19:04

+2

只是我還是這樣回答問題?我想寫'超級用戶普通用戶'。它不起作用。爲什麼它不起作用,我如何使它工作? – jameshfisher 2013-05-23 10:03:38

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> 

注意的!不聲明中的其他條件

學分@Blake

14

的問題是舊的,但不管怎麼說..

您可以將變量評估結果存儲到變量中(至少在版本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>