背景
项目中采用前后端分离架构,正常的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版权协议,转载请附上原文出处链接和本声明。