2013-06-17 3 views
2

Я перезапускаю свой сервер, который по существу очищает все содержимое сеанса. Поскольку сеанс был очищен, пользователь больше не может считаться зарегистрированным. (JSESSIONID cookie остается в браузере)Весенняя безопасность не срабатывает должным образом, когда сеанс сбрасывается

Но весна не перенаправляется на вход в систему, если я не удалю cookie JESSIONID из браузера. Мой вопрос: почему весенняя безопасность зависит от cookie JESSIONID, а не от сеанса?

Это моя весна-security.xml конфигурация -

<security:global-method-security 
     secured-annotations="enabled" /> 

    <security:http auto-config="true"> 
     <!-- Restrict URLs based on role --> 
     <security:intercept-url pattern="/portal/login*" 
      access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/logoutSuccess*" 
      access="IS_AUTHENTICATED_ANONYMOUSLY" /> 

     <security:intercept-url pattern="/**/*.css" 
      access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <security:intercept-url pattern="/**/*.js" 
      access="IS_AUTHENTICATED_ANONYMOUSLY" />  

     <security:intercept-url pattern="/portal/**" 
      access="ROLE_USER, ROLE_ADMIN" /> 

     <security:form-login login-page="/portal/login.action" 
      login-processing-url="/portal/loginProcess" default-target-url="/portal/index" 
      authentication-failure-url="/portal/login.action?login_error=1" /> 

     <security:logout logout-url="/portal/logout" 
      logout-success-url="/portal/login.action" /> 

    </security:http> 

    <security:authentication-manager> 
     <security:authentication-provider> 

      <security:jdbc-user-service 
       data-source-ref="dataSource" 
       users-by-username-query="SELECT emailid AS username, password, IF(active = 'Y', true, false) AS enabled FROM users WHERE emailid = ?" 
       authorities-by-username-query="SELECT username, authority from authorities where username = ?" /> 
     </security:authentication-provider> 
    </security:authentication-manager> 
+0

Что произойдет, если вы не удалите файл cookie из веб-браузера, и сервер не перенаправит вас на страницу ведения журнала? он ведет себя так, как будто вы вошли в систему (вы можете видеть защищенные ресурсы и т. д.)? –

+0

@Poitrek Да. Он ведет себя так, как будто пользователь вошел в систему. –

ответ

1

Я перезагрузить сервер, который по существу очищает все содержимое сессии. Поскольку сессия была убрались пользователь может не больше считаться авторизован.

По вашему комментарию, что после применения перезагрузки сервера ведет себя, как если бы пользователь был зарегистрирован, я подозреваю, что у вас есть включенность сеанса (он включен по умолчанию для Tomcat/JBoss), поэтому вы фактически вошли в систему (тот же JSESSIONID). Кроме того, вы, вероятно, потеряете содержимое сеанса, потому что объекты, которые вы помещаете в сеанс, не являются сериализуемыми.

Согласно Tomcat документации (JBoss ведет себя так же в данном случае):

Disable Session Persistence Как указано выше, каждое веб-приложение по умолчанию настроил реализации стандартный менеджер, и он выполняет постоянство сессии через перезагружается , Чтобы отключить эту функцию сохранения состояния, создать файл конфигурации контекста для приложения веб и добавьте следующий элемент там:

<Manager pathname="" /> 
0

Мой вопрос - Почему весной безопасности полагаются на JESSIONID печенье и не на сессии

У вас должны быть включены сеансы на основе файлов cookie. Если вы используете tomcat 7, у вас, вероятно, есть что-то подобное в вашем web.xml

<session-config> 
    <!-- Disables URL-based sessions (no more 'jsessionid' in the URL using Tomcat) --> 
    <tracking-mode>COOKIE</tracking-mode> 
</session-config> 

удалите его.

Смежные вопросы