oauth2 java 获取token_OAuth2 Token 一定要放在请求头中吗?
Token 一定要放在请求头中吗? 答案肯定是否定的,本文将从源码的角度来分享一下 spring security oauth2 的解析过程,及其扩展点的应用场景。
Token 解析过程说明
当我们使用 spring security oauth2 时, 一般情况下需要把认证中心申请的 token 放在请求头中请求目标接口,如下图 ①
spring security oauth2 通过拦截器获取此 token 完成令牌到当前用户信息(UserDetails)的转换。
OAuth2AuthenticationProcessingFilter.doFilter
public class OAuth2AuthenticationProcessingFilter{
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
ServletException {
try {
// 1. 根据用户请求解析令牌,组装预登陆对象
Authentication authentication = tokenExtractor.extract(request);
if (authentication == null) {
// 若是预登陆状态为空,把无状态登录清空
if (stateless && isAuthenticated()) {
SecurityContextHolder.clearContext();
}
}
else {
// 2. 根据token 来做真正的认证登录 Provier
Authentication authResult = authenticationManager.authenticate(authentication);
// 3. 登录成功逻辑
eventPublisher.publishAuthenticationSuccess(authResult);
SecurityContextHolder.getContext().setAuthentication(authResult);
}
}
catch (OAuth2Exception failed) {
// 异常通知逻辑 Spring Event
...
return;
}
chain.doFilter(request, response);
}
}
我们主要来关注第一步 根据用户请求解析令牌,组装预登陆对象
来看默认实现 BearerTokenExtractor
public class BearerTokenExtractor implements TokenExtractor {
@Override
public Authentication extract(HttpServletRequest request) {
// 1. 解析token
String tokenValue = extractToken(request);
if (tokenValue != null) {
// 2. 创建一个authentication 返回
PreAuthenticatedAuthenticationToken authentication = new PreAuthenticatedAuthenticationToken(tokenValue, "");
return authentication;
}
return null;
}
protected String extractToken(HttpServletRequest request) {
// 1.1 优先从请求header 获取token
String token = extractHeaderToken(request);
// 1.2 若是请求token 中没有,则获取请求参数中的 access_token 参数
if (token == null) {
token = request.getParameter(OAuth2AccessToken.ACCESS_TOKEN);
}
return token;
}
}
扩展点
丰富获取 token 渠道,个性化处理.例如掘金的 X-Legacy-Token 而非必须是 Authorization
请求参数中携带 access_token 参数也能被正确解析处理
重写 BearerTokenExtractor 解决,若请求携带 token 无论接口是否被设置 permitAll 都会被拦截判断的问题
oauth2 java 获取token_OAuth2 Token 一定要放在请求头中吗?相关推荐
- token放在cookie中和放在请求头中的区别
token放在cookie中 和 放在请求 头中的区别 cookie中: 防止xss攻击,但是导致所有请求都会携带token 请求头中: 会有xss风险,而且前端需要保存token并在每次请求的时候携 ...
- 【接口测试】【postman】postman通过脚本获取Token并自动加入请求头实现Token的参数化
目录 一 需求背景 二 实现方案 方案1:URL获取Token并手动填写请求头 1.1 通过URL获取Token值 1.2 Headers请求头手动填写Token并发送请求 方案2:脚本获取T ...
- mysqls压力测试怎么用_用 Swagger 测试接口,怎么在请求头中携带 Token?
松哥周末抽空给 Spring Security 系列也录制了一套视频,目录如下: 感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程 今天的话题来自一个小伙伴在微信上的提问 ...
- 前后端分离项目,请求头中包含Authorizaton:XX,但是后端getHeader(Authorizaton) 获取不到
前端请求头 后台校验 结果是 request = null: 原因是因为,在发起跨域请求时,会发送事先发送一个OPTIONS请求,可以在浏览器的NETWORK中看到发起了两个名字一样的请求. 第一个请 ...
- Vue:全局拦截所有请求,并在请求头中添加token
Vue:全局拦截所有请求,并在请求头中添加token 在实际的项目中,为了登录的安全,token是必不可少的,所以就需要前后端配合,后端生成和验证token(这方面我也写过博客,讲述后端对token的 ...
- 需要授权的 API ,必须在请求头中使用 Authorization 字段提供 token 令牌
需要授权的 API ,必须在请求头中使用 添加字段 需要授权的 API ,必须在请求头中使用 Authorization 字段提供 token 令牌 实现方法 通过 axios 请求拦截器添加 tok ...
- ajax被token拦截,vue中封装ajax请求,并且拦截请求在请求头中添加token
/** * 封装请求方法 * @param {Object} url 接口请求地址 * @param {Object} data 接口请求参数(无需请求方式参数,则此项可以为空,否则必须传) * @p ...
- axios获取header中的信息_Axios请求头中常见的Content-Type及其使用
Vue2.0之后,官方不再继续维护vue-resource,尤雨溪大大推荐使用Axios用来替代Ajax. Axios请求头中的Content-Type常见的有3种: 1.Content-Type:a ...
- axios请求拦截器在请求头中添加token
验证用户是否需要登陆,如果需要登陆在请求前在请求头中自动添加token字段. 代码: // request 拦截器 // 可以自请求发送前对请求做一些处理 request.interceptors.r ...
最新文章
- html5语义化布局分割代码,HTML5语义化标签布局的兼容性.html
- 大数据组件需要额外添加的依赖包汇总(持续更新中)
- UVa-12333:Revenge of Fibonacci 高精度
- TextField对象相关的属性和方法总结
- MySQL 正则表达式
- 信创产业已成现象级新风口,快来加入争做“弄潮儿”
- python标准库:collections和heapq模块
- 【bzoj1050】[HAOI2006]旅行comf 并查集
- C++17 Any类
- 充电枪cp信号控制板_交流充电桩控制原理
- oracle中字符串长度计算,根据 oracle 标准计算超长字符串的长度
- 2021-10-07 浊音,清音,爆破音频谱分析
- 姓谢起名:温柔贤惠、好听到爆的谢姓女孩名字
- 超级好的6款办公软件,你用过几款呢?
- k8s可视化管理工具Rancher安装和使用
- 大数据毕设 - 深度学习植物识别系统(python OpenCV)
- trickle_ice 原理
- webRTC(十五):webrtc 文件实时传输
- 大数据:数据合集,你想要的或许这里都有
- JAVA序列化标准格式(XML、JSON)
热门文章
- JavaScript | 用户定义函数的一些示例
- tcp 发送 最大数据量_网络基础知识夯实总结(三):TCP协议
- 给定一个由n个数字组成的数组,请检查是否存在重复项
- c#equals方法源码_C#中的Int32.Equals()方法示例
- MySQL 基础模块的面试题总结
- 生成文件的另一种思路——共享文件同步
- 决定c++语言中函数的返回值类型的是,全国2009年10月高等教育自学考试C++程序设计试题及部分参考答案...
- php文件怎么设置隐藏显示代码,php文件隐藏的方法
- java通过POI技术将HTML文件转成Word
- 哈工大华中科技大学计算机学院官网,我国重点大学排名盘点,哈工大重回前十,北理工只排十四...