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版本需要引入以下依赖:

<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
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,115评论 19 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,993评论 6 342
  • Spring Web MVC Spring Web MVC 是包含在 Spring 框架中的 Web 框架,建立于...
    Hsinwong阅读 22,620评论 1 92
  • 1.1 spring IoC容器和beans的简介 Spring 框架的最核心基础的功能是IoC(控制反转)容器,...
    simoscode阅读 6,779评论 2 22
  • 三年没有工作了,最近由于走了狗屎运,前领导在准备一个项目的时候,决定捎上我,让我开始了一边在家带娃,一边工作,...
    出走的Nala阅读 306评论 0 0