最近项目升级spring boot,由之前的1.5.x升级到2.x,项目是前后端分离的,session共享,token认证放到了header中,升级后一直不能实现共享了。
主要是由于我们认证放到了resquest header中了,而1.5.x和2.x在这块的处理有差异,这个坑害我找了很久啊(抓狂)。
spring boot 1.5.x版本需要引入以下依赖:
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
<version>1.3.3.RELEASE</version>
</dependency>
增加Bean:HttpSessionStrategy
import org.springframework.context.annotation.Bean;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.http.HeaderHttpSessionStrategy;
import org.springframework.session.web.http.HttpSessionStrategy;
//设置session失效时间为30分钟
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 1800)
public class HttpSessionConfig {
@Bean
public HttpSessionStrategy httpSessionStrategy() {
return new HeaderHttpSessionStrategy();
}
}
但是spring boot2.x之后,官网提供的例子显示不需要引入spring-session依赖了,但是不引入的话HttpSessionStrategy类找不到;引入spring-session,则有时报错。
spring boot2.x header认证
1.不需要再引入spring-session包了,添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
<version>2.0.5.RELEASE</version>
</dependency>
增加Bean:HeaderHttpSessionIdResolver:
import org.springframework.context.annotation.Bean;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.http.HeaderHttpSessionIdResolver;
//设置session失效时间为30分钟
@EnableRedisHttpSession(maxInactiveIntervalInSeconds= 1800)
public class HttpSessionConfig {
@Bean
public HeaderHttpSessionIdResolver httpSessionStrategy() {
return new HeaderHttpSessionIdResolver("x-auth-token");
}
}
其中就是之前的HttpSessionStrategy修改为HeaderHttpSessionIdResolver。
HttpSessionStrategy类之前在spring-session依赖中,新版的HeaderHttpSessionIdResolver在spring-core中,而依赖的spring-session-data-redis会自动将spring-core添加到项目中。
至此,认证放到header中可以实现共享了。