SpringBoot Redis Session Header 的身份验证

背景

项目中采用前后端分离架构,正常的sessionId都是存储在cookie中;SpringBoot默认就支持。但是移动端接入时不太适用。一般的做法会使用token验证或者JWT等认证;springboot中session策略支持把sessionId从cookie获取转移到header中。

一、基于spring-session-redis的配置

  • 引入依赖
		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
        </dependency>
  • 配置RedisConfig开启RedisHttpSession
@Configuration
@EnableRedisHttpSession
public class RedisConfig {
    @Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate redisTemplate = new RedisTemplate();
        redisTemplate.setConnectionFactory(factory);
        //序列化设置省略
        return redisTemplate;
    }
	/*重要就是这个,可把sessionId改到Header中获取,Header中自定义参数名称  x-auth-token */
    @Bean
    public HttpSessionIdResolver httpSessionStrategy(){
        return new HeaderHttpSessionIdResolver("x-auth-token");
    }

}

请求接口时在请求的header中增加x-auth-token参数并传递值。

  • 配置redis库
spring:
  redis:
    lettuce:
      pool:
        max-active: 20
        min-idle: 0
        max-idle: 10
      shutdown-timeout: 100ms
    host: 192.168.1.111
    database: 1
    port: 6379

二、获取sessionId

默认的配置sessionId直接返回给前端cookie中,修改策略后sessionId在登录成功后会返回到Header中;如下图:
在这里插入图片描述


版权声明:本文为gao_liang0420原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。