使用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?

使用SQS接收SES消息

通过 aws ses 在 node.js 中发送带有附件的邮件

Ruby/node.js + Amazon SES:是不是有 Amazon SES API?

通过 SMTP 使用 AWS SES 发送电子邮件,错误 421

使用 django 和 AWS SES 签名 V4 发送电子邮件