Я пытаюсь добавить spring-session с redis с использованием xml к существующему проекту spring 3.
Однако я обнаружил, что объект сеанса, который получается с помощью user = (User)session.getAttribute(USER_ID);
, становится другим объектом после добавления весенней сессии с помощью redis.
Я имею в виду, прежде чем я добавлю функцию весенней сессии redis, журнал отладки будет:
[DEBUG] user object when first created: com.company.User@63e02404
[DEBUG] user object before something goes wrong: com.company.User@63e02404
Обратите внимание, что вышеупомянутые двапользователи ссылаются на одну и ту же память.Это означает, что они принадлежат одному экземпляру.
После добавления функции redis spring-session журнал отладки становится:
[DEBUG] user object when first created: com.company.User@bf98354
[DEBUG] user object before something goes wrong: com.company.User@711d0e44
Два пользовательских объекта не ссылаются на один и тот же адрес памятибольше.Это создает некоторые ошибки в проекте.Например, user.getName()
возвращает пустую строку, ""
, после добавления spring-session.
Код, связанный с spring-session, имеет следующий вид:
WEB-INF/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>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/context.xml</param-value>
</context-param>
WEB-INF/context.xml
:
<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory">
<property name="hostName" value="127.0.0.1" />
<property name="port" value="6379" />
</bean>
<bean id="redisTemplate" class="org.springframework.data.redis.core.StringRedisTemplate">
<property name="connectionFactory" ref="jedisConnectionFactory" />
</bean>
<util:constant static-field="org.springframework.session.data.redis.config.ConfigureRedisAction.NO_OP"/>
<!-- Session -->
<bean id="redisHttpSessionConfiguration" class="org.springframework.session.data.redis.config.annotation.web.http.RedisHttpSessionConfiguration" >
<property name="maxInactiveIntervalInSeconds" value="120" />
</bean>
User.java
public class User extends JdkSerializationRedisSerializer implements Serializable {
private static final long serialVersionUID = 1L;
Что может вызвать эту проблему?
Я проверял, чтоRedis содержит данные user
.
Извините, что я не нашел способа создать минимальную среду для воспроизведения этого явления.
Если вам нужна какая-либо другая информация о проекте, просто скажите мне.Я вставлю эту информацию в вопрос.