2016-03-29 4 views
0

Я просматриваю перемещение сеанса пользователя с уровня приложения на экземпляр Redis. Я считаю, что все правильно настроено в соответствии с документацией (http://docs.spring.io/spring-session/docs/current/reference/html5/#httpsession), но я не вижу поведения, которое я ожидаю, и думаю, что я где-то пропустил шаг.Весенние сеансы HttpSession не может полностью заменить JSESSIONID

Применение в настоящее время использует HttpSession, поэтому я просто добавил следующее в контексте:

<context:annotation-config/> 
<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/> 
<beans:bean class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration"/> 
<beans:bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory" p:host-name="HOSTNAME" p:port="6379" /> 

Добавлено следующее web.xml:

<filter> 
    <filter-name>springSessionRepositoryFilter</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>springSessionRepositoryFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Приложение строит, разворачивает и загружает на странице, но когда я смотрю на файлы cookie на странице, у меня есть как JSESSIONID, так и SESSION. JSESSIONID, который я знаю, используется Spring Security, и похоже, что SESSION используется Spring Session. Когда я смотрю внутрь redis, похоже, что SESSION - это тот, который хранится.

Другая проблема заключается в том, что пользовательские объекты сеанса (добавленные с использованием session.setAttribute) не отображаются в сеансе. Единственное, что появляется в сеансе, это ПОСЛЕ входа в систему и является объектом SPRING_SECURITY_CONTEXT. Когда я удаляю фильтр Spring Session, эти объекты добавляются в сеанс просто отлично.

Это обычное поведение, или у меня есть странный конфликт из-за моей установки?

+0

https://stackoverflow.com/questions/44303504/spring-session-unable-save-session-to-redis –

ответ

2

У меня была такая же проблема, и, наконец, оказалось, что это был результат неправильного порядка фильтров, объявленных в моем web.xml. Первым фильтром, который проходил запрос, был фильтр пружинных фильтров, в котором в ответ был настроен файл cookie JSESSIONID, а затем появился фильтр репозитория весеннего сеанса, установив свой собственный файл cookie SESSION. После изменения порядка, чтобы фильтр репозитория Spring сессии выполнял свое действие первым, все работает отлично.

+0

Подтверждено, что проблема. Благодаря! – Dave4988

+0

https://stackoverflow.com/questions/44303504/spring-session-unable-save-session-to-redis –

+0

спас мою жизнь :) спасибо – MarianP