2013-07-04 92 views
2

我工作的一個Spring MVC Web應用程序。上週我開始將Sping Secuirty添加到我的項目中。我面臨的問題涉及會話管理。 這裏是我的彈簧security.xml文件的HTTP部分春季安全會話管理和Spring MVC的視圖解析器錯誤

<http auto-config="true"> 
     <intercept-url pattern="/css" filters="none"/> 
     <intercept-url pattern="/js" filters="none"/> 
     <intercept-url pattern="/logout" filters="none"/> 
     <intercept-url pattern="/loginfailed" filters="none"/> 
     <intercept-url pattern="/login" filters="none"/> 
     <intercept-url pattern="/**" access="ROLE_USER" /> 
     <form-login login-page="/login" default-target-url="/hello" 
     authentication-failure-url="/loginfailed" /> 
     <session-management invalid-session-url="/login.jsp?error=sessionExpired" session-authentication-error-url="/login.jsp?error=alreadyLogin"> 
      <concurrency-control max-sessions="1" expired-url="/login.jsp?error=sessionExpiredDuplicateLogin" error-if-maximum-exceeded="false"/> 
     </session-management> 
    </http> 

登錄/註銷工作正常,但是當我試圖通過嘗試不同的瀏覽器無效的會話-URL =「/登錄登錄無效用戶會話。 jsp?error = sessionExpired「失敗。瀏覽器重定向,因爲我看到了GET請求轉到login.jsp?正在發送錯誤= sessionExpired時。但是,網頁顯示錯誤,指出該資源不可用。我懷疑它與我的dispatcher-servlet.xml中的

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <property name="viewClass"> 
    <value>org.springframework.web.servlet.view.JstlView</value> 
    </property> 
    <property name="prefix"> 
    <value>/WEB-INF/pages/</value> 
    </property> 
    <property name="suffix"> 
    <value>.jsp</value> 
    </property> 
</bean> 

有關。但是,我不知道如何解決這個問題。 login.jsp位於WEB-INF/pages/

回答

2

在我看來,Spring MVC中的DispatcherServlet找不到/login.jsp一個映射,因爲it's not set as a view that accessible without controller。我還假設你有/登錄映射到login.jsp(你沒有提供足夠的信息來證實這一點),但如果是這樣的話,只需使用expired-url="/login?error=sessionExpiredDuplicateLogin

+0

謝謝你!工作正常!順便說一句,我種失去試圖瞭解無效會話的URL,會話的認證錯誤的URL,過期的URL之間的差異。我知道有文件,但仍也許你可以指向我的資源,將提供更詳細的信息。 –

+0

http://static.springsource.org/spring-security/site/docs/3.1.x/reference/appendix-namespace.html#nsa-session-management – gerrytan

0

您正在重定向到jsp而不是映射的url。

會話管理標籤應該是:

<session-management invalid-session-url="/login?error=sessionExpired" session-authentication-error-url="/login?error=alreadyLogin"> 
     <concurrency-control max-sessions="1" expired-url="/login?error=sessionExpiredDuplicateLogin" error-if-maximum-exceeded="false"/> 
</session-management>