使用SpringRedisSession改变Session的作用域
Posted lovoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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();
}
}
以上是关于使用SpringRedisSession改变Session的作用域的主要内容,如果未能解决你的问题,请参考以下文章
如何授权 lambda 使用 CDK 执行 ses:SendEmail?
通过 aws ses 在 node.js 中发送带有附件的邮件
Ruby/node.js + Amazon SES:是不是有 Amazon SES API?