2012-07-18 47 views
2

我有一個和Spring 3.0一起工作的項目。我現在已經轉移到Maven來控制依賴關係,並轉移到Spring 3.1.2 jar和Spring security 3.1.1 jar。如何使用Spring安全性配置WebSecurityExpressionHandler?

當我試圖訪問包括使用安全標籤庫(EG)的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" /> 

我在我的項目包中找不到那個類,所以想着g它可能只是我嘗試過的班的一種舉動:

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

這給了我同樣的錯誤。

Spring的安全依賴我在此刻配置: 彈簧安全核心3.1.1 彈簧安全標籤庫-3.1.1 彈簧安全ACL-3.1.1 彈簧安全 - config-3.1.1 spring-security-web-3.1.1

我是否缺少一個包含任何'use-expressions = true'需要的jar?

+0

因此,似乎WebSecurityExpressionHandler在Spring 3.1.1中已被刪除,這將解釋爲什麼我的應用程序無法找到實例。 https://jira.springsource.org/browse/SEC-1985 雖然現在我更加迷失了,因爲大概我需要替換那個功能,但是我不知道是什麼。 – DaFoot 2012-07-18 16:21:22

+0

這個問題解決了嗎? – jbarrus 2012-07-26 15:29:07

+0

它已被修復,但我不能告訴你如何/爲什麼。它在一系列變化之後停止抱怨。 我會在一分鐘內添加一個答案.... – DaFoot 2012-07-27 10:12:36

回答

1

因爲我已經做了一些改變,以我的項目,我不是100%肯定這實際上解決了這個問題,但最有可能的競爭者如下:

  • 有一些3.0罐藏在我的應用程序的lib文件夾。手動刪除它們。
  • 刪除從安全上下文的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"/> 
    --> 
    

    改變到後續在安全上下文的元素之前:

    <!-- 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的問題。

0

這是不對的, 我們使用攔截url來控制角色訪問,但是你省略了它們。