【问题标题】:Springsession and redis mixing up sessionsSpring Session 和 redis 混合会话
【发布时间】:2018-03-14 11:31:33
【问题描述】:

我们使用 redis 作为会话存储来配置 springsessions。随着更大的负载,它最终导致用户碰巧取回随机会话数据。

很遗憾,我们无法再次重现它,并且无法在测试环境中重现。

有没有人有类似的经历,或许可以指出看什么的方向?

【问题讨论】:

  • 我们在我们的应用程序中遇到了类似的问题,您找到原因/解决方案了吗?

标签: java session redis spring-session


【解决方案1】:

我在我的项目中使用了redis session store的spring session如下,效果正常,分享一下,希望对你有帮助!

使用的 spring boot 启动器版本:1.4.3

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>

     <dependency>
        <groupId>org.springframework.session</groupId>
        <artifactId>spring-session</artifactId>
    </dependency>


    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>4.2.0.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>biz.paluch.redis</groupId>
        <artifactId>lettuce</artifactId>
        <version>3.5.0.Final</version>
    </dependency>

Spring session redis 配置类:

package az.com.cybernet.aas.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.data.redis.connection.lettuce.
LettuceConnectionFactory;
import org.springframework.session.data.redis.config.annotation.web.http.
EnableRedisHt
tpSession;
import org.springframework.session.web.http.CookieHttpSessionStrategy;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;
import org.springframework.session.web.http.HttpSessionStrategy;



@EnableRedisHttpSession
public class RedisConfig {

@Value("${spring.redis.host}")
private String hostname;
@Value("${spring.redis.port}")
private String port;
// @Value("${spring.redis.password}")
// private String password;

@Bean
public LettuceConnectionFactory connectionFactory() {
    LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory();
    connectionFactory.setHostName(hostname);
    // connectionFactory.setPassword(password);
    connectionFactory.setDatabase(2);
    connectionFactory.setPort(Integer.parseInt(port));
    return connectionFactory;
}

@Bean
public CookieSerializer cookieSerializer() {
    DefaultCookieSerializer serializer = new DefaultCookieSerializer();
    serializer.setCookieName("JSESSIONID");
    serializer.setCookiePath("/");
    serializer.setDomainNamePattern("^.+?\\.(\\w+\\.[a-z]+)$");
    return serializer;
}

@Bean
public HttpSessionStrategy strategy() {
    CookieHttpSessionStrategy cookieHttpSessionStrategy = new CookieHttpSessionStrategy();

    cookieHttpSessionStrategy.setCookieSerializer(cookieSerializer());
    return cookieHttpSessionStrategy;

}

}

【讨论】:

    猜你喜欢
    • 2016-03-03
    • 2015-12-23
    • 2016-12-31
    • 1970-01-01
    • 2018-12-16
    • 2016-07-08
    • 2016-10-04
    • 2021-09-13
    • 2019-02-12
    相关资源
    最近更新 更多