2011-03-30 45 views
13

Đang cố gắng để kiểm tra để xem nếu người dùng đang đăng nhập Tôi đang sử dụng đoạn mã sau:Lỗi khi sử dụng Spring ủy quyền thẻ để kiểm tra xem liệu người dùng có đăng nhập không?

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

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

Nhưng tôi nhận được erorr sau đây?

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) 

Trả lời

21

Để sử dụng biểu thức để bảo đảm URL cá nhân, trước tiên bạn sẽ cần phải thiết lập việc sử dụng biểu thức thuộc tính trong phần tử true

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

+0

vâng tôi đã nhận nó làm việc ngay bây giờ. cảm ơn và bạn đã đúng – SJS

24

Thiết use-biểu thức = "true" trong phần tử http sẽ hoạt động nhưng có nghĩa là tất cả các thiết lập bảo mật của bạn trong cả mã Java và ngữ cảnh bảo mật đều phải sử dụng ký pháp biểu thức. Điều này có thể là một vấn đề nếu bạn hiện đang sử dụng các ký hiệu bảo mật tiêu chuẩn.

Để sử dụng cả hai biểu thức và ký hiệu tiêu chuẩn chỉ cần khai báo một bean mới trong bối cảnh an ninh của bạn như vậy -

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

Nó không hoạt động ít nhất cho các biểu thức bên trong phần tử http trong ngữ cảnh bảo mật. – newbie

Các vấn đề liên quan