2013-07-04 3 views
2

Я работаю над веб-приложением Spring MVC. На прошлой неделе я начал добавлять Sping Secuirty в свой проект. Проблема, с которой я столкнулся, связана с управлением сеансами. Вот HTTP часть моей весенней security.xmlУправление сеансом безопасности Spring и Spring MVC error error error

<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? Error = sessionExpired отправляется. Однако на веб-странице отображается ошибка, указывающая, что ресурс недоступен. Я подозреваю, что это как-то связано с

<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> 

в моем диспетчере-сервлете.xml. Тем не менее, я точно не знаю, как решить эту проблему. login.jsp находится в WEB-INF/pages/

ответ

2

Мне кажется Spring MVC DispatcherServlet не смог найти отображение для /login.jsp потому it's not set as a view that accessible without controller. Я также предполагаю, что у вас есть/login, сопоставленный с login.jsp (вы не указали достаточно информации, чтобы подтвердить это), но если это так, просто используйте expired-url="/login?error=sessionExpiredDuplicateLogin

+0

спасибо человеку! Работает отлично! Кстати, я как бы потерялся, пытаясь понять разницу между invalid-session-url, session-authentication-error-url, expired-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>