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

相关文章

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

Qt实现发送HTTP请求的示例详解

《Qt实现发送HTTP请求的示例详解》这篇文章主要为大家详细介绍了如何通过Qt实现发送HTTP请求,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、添加network模块2、包含改头文件3、创建网络访问管理器4、创建接口5、创建网络请求对象6、创建一个回复对

SpringBoot项目注入 traceId 追踪整个请求的日志链路(过程详解)

《SpringBoot项目注入traceId追踪整个请求的日志链路(过程详解)》本文介绍了如何在单体SpringBoot项目中通过手动实现过滤器或拦截器来注入traceId,以追踪整个请求的日志链... SpringBoot项目注入 traceId 来追踪整个请求的日志链路,有了 traceId, 我们在排

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,