B/S架构架构下 session请求的由Cooke换成请求头

2024-05-11 09:48

本文主要是介绍B/S架构架构下 session请求的由Cooke换成请求头,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

替换Cookie会话保持换到自定义请求头

背景:应架构部要求,将APP的服务端用户体系,整体迁移的中台进行统一管理,统一使用中台的验证方式。以前APP使用的jwttoken,请求头采用oauth2的方式在请求中 Authorization=token进行验证,在gateway网关进行验证,这个应用已经和其他外部系统对接好了。因此这种 请求模式要求不能改变,否者对接的系统又要在对接一次。

思考:中台提供的是cookie中放置会话id,每次请求需要携带cookie,理论上和原来的方式在请求头中使用Authorization=token进行验证本质上没区别,都是验证这个人是否有权限去访问或者请求服务。

token与sessionId区别

1、token和cookie一样都是首次登陆时,由服务器下发,都是当交互时进行验证的功能,作用都是为无状态的HTTP提供的持久机制。

2、token存在哪儿都行,localstorage或者cookie。

3、token和cookie举例,token就是说你告诉我你是谁就可以。

4、对于token而言,服务器不需要去查看你是谁,不需要保存你的会话。当用户logout的时候cookie和服务器的session都会注销;但是当logout时候token只是注销浏览器信息,不查库。

5、token优势在于,token由于服务器端不存储会话,所以可扩展性强,token还可用于APP中。

使用Sesssion考虑的问题

由于session是时效的,而对于用户而言老登陆肯定是不行的。如何保持会话?

是否可以将cookie+sessionId会话的方式改成请求 Authorization=sessionId的方式?

思路:中台采用的是SpringSecurity进行的鉴权

1、第一种,使用拦截器拦截请求替换Authorization=sessionId 为cookie+sessionId 方式。

治标不治本,因此没有首先尝试。

2、第二种,重源头将请求方式统一换成Authorization=sessionId。

直接替换掉cookie方式,采用请求头方式更适合app的交互方式而且其他系统不需要改造

行动:

首先看了一遍平台才用那种登录方式,发现采用的是Security用户与密码模式,是在登录成功之后创建的session。

CookieHttpSessionIdResolver使用的这个实现来创建的,进入类发现

 

看到了 HttpSessionIdResolver 他是生成session的接口,提供了两种实现方式

一瞬间看到了希望,竟然还有头部的实现方式。马上进去看看源码

 

发现头部的方式提供了两种模式,往下一看哎,竟然能之定义,顿时心里就美滋滋的。 

猜测是不是可以自定义一个配置将这个CookieHttpSessionIdResolver方式替换掉。于是就写了一个配置文件尝试了一下 

 之前app是在请求头中加的HttpHeaders里的如下的方式多为请求的头的key

启动系统尝试发现以前登录方式那不到cookie,自己使用http请求工具写了一个请求

发现在响应头的竟然有这个 Authorization=sessionId,于是我就尝试在拿着这个session在其他接口上进行尝试

 成功了,这样其他的接口不需要在对接了。直接解决了根本问题。

关于失效的问题我们这头将session有效设置为24小时,每天第一次打开应用会刷新一次。

总计:

这种方式仅适用向我遇到这种情况,其他情况我不清楚是否适用

主要通过替换HttpSessionIdResolver的默认实现方式 CookieHttpSessionIdResolver为HeaderHttpSessionIdResolver

同时HeaderHttpSessionIdResolver之提供了自定义的头名的方式,可以根据需要自行定义。

自己写一个配置类进行替换。

这篇关于B/S架构架构下 session请求的由Cooke换成请求头的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/979194

相关文章

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1

SpringBoot项目中Redis存储Session对象序列化处理

《SpringBoot项目中Redis存储Session对象序列化处理》在SpringBoot项目中使用Redis存储Session时,对象的序列化和反序列化是关键步骤,下面我们就来讲讲如何在Spri... 目录一、为什么需要序列化处理二、Spring Boot 集成 Redis 存储 Session2.1

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

Spring Boot Controller处理HTTP请求体的方法

《SpringBootController处理HTTP请求体的方法》SpringBoot提供了强大的机制来处理不同Content-Type​的HTTP请求体,这主要依赖于HttpMessageCo... 目录一、核心机制:HttpMessageConverter​二、按Content-Type​处理详解1.

一文详解如何在Vue3中封装API请求

《一文详解如何在Vue3中封装API请求》在现代前端开发中,API请求是不可避免的一部分,尤其是与后端交互时,下面我们来看看如何在Vue3项目中封装API请求,让你在实现功能时更加高效吧... 目录为什么要封装API请求1. vue 3项目结构2. 安装axIOS3. 创建API封装模块4. 封装API请求

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

SpringMVC获取请求参数的方法

《SpringMVC获取请求参数的方法》:本文主要介绍SpringMVC获取请求参数的方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下... 目录1、通过ServletAPI获取2、通过控制器方法的形参获取请求参数3、@RequestParam4、@

鸿蒙中Axios数据请求的封装和配置方法

《鸿蒙中Axios数据请求的封装和配置方法》:本文主要介绍鸿蒙中Axios数据请求的封装和配置方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.配置权限 应用级权限和系统级权限2.配置网络请求的代码3.下载在Entry中 下载AxIOS4.封装Htt

springboot filter实现请求响应全链路拦截

《springbootfilter实现请求响应全链路拦截》这篇文章主要为大家详细介绍了SpringBoot如何结合Filter同时拦截请求和响应,从而实现​​日志采集自动化,感兴趣的小伙伴可以跟随小... 目录一、为什么你需要这个过滤器?​​​二、核心实现:一个Filter搞定双向数据流​​​​三、完整代码