2011-03-30 33 views
13

試圖測試,看用戶是否在我登錄我用下面的代碼:使用Spring授權標記檢查用戶是否已登錄錯誤?

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 

<sec:authorize access="isAuthenticated()"> 
    YES, you are logged in! 
</sec:authorize> 

但我得到以下erorr?

javax.servlet.jsp.JspException: No visible WebSecurityExpressionHandler instance could be found in the application context. There must be at least one in order to support expressions in JSP 'authorize' tags. 
     at org.springframework.security.taglibs.authz.AuthorizeTag.getExpressionHandler(AuthorizeTag.java:100) 
     at org.springframework.security.taglibs.authz.AuthorizeTag.authorizeUsingAccessExpression(AuthorizeTag.java:58) 
     at org.springframework.security.taglibs.authz.AuthorizeTag.doStartTag(AuthorizeTag.java:48) 

回答

21

要使用表達式來保護單獨的URL,你首先需要設置使用表達式的元素屬性爲true

<http use-expressions="true"> See Spring Security doc

+0

是的,我懂了剛纔的工作。謝謝你,你是對的 – SJS 2011-03-30 15:03:20

24

設置使用表達式=「真」在http元素中可以工作,但意味着Java代碼和安全上下文中的所有安全設置都必須使用表達式記號。如果您當前正在使用標準安全標記,則這可能會成爲問題。

同時使用表達式和標準符號只是在你的安全上下文宣告一個新的bean像這樣 -

<beans:bean class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler"/> 
+0

它至少在安全上下文中的http元素內的表達式沒有工作。 – newbie 2012-03-20 11:47:02

相關問題