簡體   English   中英

如何使用Spring安全性配置WebSecurityExpressionHandler?

[英]How do I configure a WebSecurityExpressionHandler with Spring security?

我有一個可以在Spring 3.0中正常運行的項目。 我現在已移至Maven以控制依賴性,並移至Spring 3.1.2 jar和Spring security 3.1.1 jar。

當我嘗試訪問包括使用安全性標簽庫(例如)的JSP時,出現以下錯誤:

javax.servlet.ServletException: javax.servlet.jsp.JspException: java.io.IOException: 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.

在我的安全上下文中,我有:

<http auto-config="true" use-expressions="true" create-session="ifRequired"

從我的舊項目中:

<beans:bean id="expressionHandler" class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler" />

我在為我的項目准備的軟件包中找不到該類,因此認為這可能只是我嘗試過的類的移動:

<beans:bean id="expressionHandler" class="org.springframework.security.web.access.expression.WebSecurityExpressionHandler" />

這給了我同樣的錯誤。

我目前已配置的spring-security依賴項:spring-security-core-3.1.1 spring-security-taglibs-3.1.1 spring-security-acl-3.1.1 spring-security-config-3.1.1 spring-security -Web-3.1.1

我是否錯過了一個可以容納任何'use-expressions = true'需求的罐子?

從那以后,我對我的項目進行了許多更改,但我不確定100%確實解決了此問題,但下面列出了最有可能的競爭者:

  • 我的應用程序的lib文件夾中隱藏了一些3.0 jar。 手動刪除它們。
  • 完全從安全性上下文中刪除了expressionHandler定義
  • 更改了URL映射樣式,因此:

     <!-- Spring Security < 3.1 These were inside the <http... > element <intercept-url pattern="/public/**" filters="none"/> <intercept-url pattern="/login" filters="none"/> <intercept-url pattern="/loggedOut" filters="none"/> <intercept-url pattern="/include/css/**" filters="none"/> <intercept-url pattern="/include/img/**" filters="none"/> --> 

    在security-context中的元素之前更改為以下:

     <!-- for Spring-security >= 3.1 --> <http pattern="/public/**" security="none"/> <http pattern="/login" security="none"/> <http pattern="/loggedOut" security="none"/> <http pattern="/include/css/**" security="none"/> <http pattern="/include/img/**" security="none"/> 

我的元素現在顯示為:

        <http use-expressions="true" auto-config="true" create-session="ifRequired" access-denied-page="/accessDenied" >

我希望這可以幫助其他有類似問題的人從Spring Security 3.0-> 3.1遷移。

這是不正確的,我們使用攔截URL來控制角色訪問,但是您忽略了它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM