Spring boot2.x+Session+请求header认证

最近项目升级spring boot,由之前的1.5.x升级到2.x,项目是前后端分离的,session共享,token认证放到了header中,升级后一直不能实现共享了。
主要是由于我们认证放到了resquest header中了,而1.5.x和2.x在这块的处理有差异,这个坑害我找了很久啊(抓狂)。

spring boot 1.5.x版本需要引入以下依赖:


        org.springframework.session
        spring-session
        1.3.3.RELEASE

增加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包了,添加如下依赖:


                org.springframework.boot
                spring-boot-starter-data-redis
                2.0.5.RELEASE
            
            
                org.springframework.session
                spring-session-data-redis
                2.0.5.RELEASE
            

增加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中可以实现共享了。


image.png

你可能感兴趣的:(Spring boot2.x+Session+请求header认证)