安全认证

Spring boot2.x+Session+请求header认

2018-10-01  本文已影响1089人  索隆大大

最近项目升级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中可以实现共享了。


image.png
上一篇 下一篇

猜你喜欢

热点阅读