2011-03-30 80 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