0
点赞
收藏
分享

微信扫一扫

使用SpringRedisSession改变Session的作用域


前言

在微服务中及分布式部署的项目中,如果使用HttpSession,会发生session不能共享的问题,如auth.mall.com中login方法中设置的session中mall.com的主页中不能访问,因为子域名的限制;一台服务器上创建的session在另一台服务器不能访问。虽然可通过tomcat设置session同步,但这样做内存消耗非常大,对于大型的项目不合适;我们也可通过ip_hash固定访问,但不容易扩展,目前最好的方法就是将session存储到redis中,每台服务器都可直接调用,保证了session的一致。

1、在项目中引入spring session

<!-- 整合springsession -->
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.3.1.RELEASE</version>
</dependency>

2、在application.ymll配置

spring:
redis:
host: 192.168.16.149
port: 6379
session:
store-type: redis
timeout: 30m

3、在启动类上添加注解@EnableRedisHttpSession

@EnableRedisHttpSession
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication(exclude = {
DataSourceAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class,
DruidDataSourceAutoConfigure.class,
HibernateJpaAutoConfiguration.class})
public class MallAuthServerApplication {

public static void main(String[] args) {
SpringApplication.run(MallAuthServerApplication.class, args);
}

}

4、添加作用域配置

@Configuration
public class MallSessionConfig {

@Bean
public CookieSerializer cookieSerializer() {

DefaultCookieSerializer cookieSerializer = new DefaultCookieSerializer();

//放大作用域
cookieSerializer.setDomainName("mall.com");
cookieSerializer.setCookieName("GULISESSION");

return cookieSerializer;
}


@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return new GenericJackson2JsonRedisSerializer();
}

}


举报

相关推荐

0 条评论