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实现请求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连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保