当前位置: 首页 > news >正文

@RequestHeader(“Authorization“) 解析:HTTP 请求头中的 Authorization 字段

一、@RequestHeader 注解的作用

@RequestHeader 是 Spring MVC 中的注解,用于从 HTTP 请求头中提取特定字段的值。
在你的代码中:

  • @RequestHeader("Authorization") String token:从请求头中获取名为 Authorization 的字段值,并赋值给 token 参数。
  • @RequestHeader("User-Agent") String userAgent:获取客户端浏览器信息。

二、"Authorization" 字段的来源

Authorization 是一个标准的 HTTP 请求头字段,其定义来自:

  1. HTTP 协议规范(RFC 7235):

    • 用于客户端向服务器传递身份验证凭证(如令牌、用户名密码)。
    • 格式通常为:Authorization: <认证类型> <凭证>
      例如:
Authorization: Bearer eyJhbGciOiJIUzI1NiJ9...
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
  1. OAuth 2.0 或 JWT 等认证机制

    • 现代 Web 应用中,Authorization 字段常被用于传递 JWT(JSON Web Token) 或 OAuth 令牌

三、代码中的 "Authorization" 从哪里来?

Authorization 字段的值由客户端(如浏览器、App)在发送请求时添加,常见来源:

  1. 前端代码手动设置(如 Axios 请求):

axios.get('/profile', {headers: {'Authorization': 'Bearer ' + token  // token 可能来自登录后的存储}
});

浏览器自动发送(如 Basic Auth):

fetch('/profile', {headers: {'Authorization': 'Basic ' + btoa('username:password')}
});

中间件自动处理(如拦截器、过滤器):

// 例如,JWT 认证过滤器会从 Cookie 或 LocalStorage 中读取 token,添加到请求头
request.addHeader("Authorization", "Bearer " + token);

四、服务端如何使用这个 token?

在你的 getProfile 方法中,获取到 token 后,通常会:

  1. 验证 token 有效性(如签名、过期时间)。
  2. 解析 token 获取用户信息(如用户 ID、角色)。
  3. 根据用户信息查询数据库,返回用户资料。

示例代码

@GetMapping("/profile")
public User getProfile(@RequestHeader("Authorization") String token) {// 1. 提取 token(移除 "Bearer " 前缀)String jwtToken = token.replace("Bearer ", "");// 2. 验证 token(实际项目中通常用 JWT 库)Claims claims = jwtService.parseToken(jwtToken);// 3. 获取用户 IDLong userId = Long.valueOf(claims.getSubject());// 4. 查询数据库返回用户信息return userRepository.findById(userId).orElseThrow();
}

五、总结

  • Authorization 是标准的 HTTP 请求头字段,用于传递认证凭证。
  • 它由客户端在请求时添加,服务端通过 @RequestHeader 注解获取。
  • 常见用途:JWT 认证、OAuth 2.0 令牌传递、Basic Auth 等。

通俗理解
Authorization 就像你去银行办业务时出示的身份证,告诉服务器 "我是谁",而 @RequestHeader 则是服务器读取你身份证信息的工具。


文章转载自:

http://zISsWJsK.yhgbd.cn
http://5qKAp2ek.yhgbd.cn
http://mIH1SQM3.yhgbd.cn
http://kRtnURU7.yhgbd.cn
http://eC9t1sEo.yhgbd.cn
http://rZD4WD1U.yhgbd.cn
http://6kqFCay1.yhgbd.cn
http://PBwpCD0a.yhgbd.cn
http://bDxeoXRR.yhgbd.cn
http://R3V34J33.yhgbd.cn
http://VWmOxYo2.yhgbd.cn
http://msYlI01S.yhgbd.cn
http://z75hJxa3.yhgbd.cn
http://uevwsulf.yhgbd.cn
http://tmBXn7Oy.yhgbd.cn
http://Vjn9H9uF.yhgbd.cn
http://ERpcAKhw.yhgbd.cn
http://H5iEmZtt.yhgbd.cn
http://PXkawvHK.yhgbd.cn
http://l9sy8KVp.yhgbd.cn
http://2r8AWYQV.yhgbd.cn
http://Pml5rPxE.yhgbd.cn
http://93SxipDN.yhgbd.cn
http://sPygt5Im.yhgbd.cn
http://WXwwQZxj.yhgbd.cn
http://53H5Of6D.yhgbd.cn
http://LPOuxNsS.yhgbd.cn
http://6hfmSPg0.yhgbd.cn
http://q3K89Mns.yhgbd.cn
http://SNrIGFA5.yhgbd.cn
http://www.dtcms.com/a/247882.html

相关文章:

  • 网络原理10 - HTTP完
  • Blender基础知识-操作模式、基本操作、渲染、灯光、材质、粒子系统、动画
  • 基于Cesium的Shadertoy纹理材质应用
  • VSCode - VSCode 转换英文字母的大小写
  • Blender 3D建模工具的快捷键总结--选择、视图、对象、编辑、UV贴图、模型材质、动画与渲染、工具
  • VSCode - VSCode 让未被编辑的标签页不被自动关闭
  • 城市排水管网液位流量监测系统解决方案
  • FPGA多通道卷积加速器:从零构建手写识别的硬件引擎
  • Hadoop 002 — HDFS常用命令及SpringBoot整合操作
  • PCIe(一)概述/拓扑/空间配置
  • Deit 模型讲解和代码资源合集
  • Redis高级|Redis单线程VS多线程(基础)
  • 举例说明单片机,主循环和中断资源访问冲突的案例
  • 苹果越来越像安卓,华为越来越像苹果
  • conda pack迁出环境异常
  • Monte Carlo衍生品定价(金融工程)
  • 无人机抛投器模块使用与技术分析!
  • 光伏功率预测 | RF随机森林多变量单步光伏功率预测(Matlab完整源码和数据)
  • 基于PSO粒子群优化的VMD-LSTM时间序列预测算法matlab仿真
  • 北斗导航 | 基于matlab的卫星导航单点定位算法
  • 什么是音频?
  • Linux爬虫系统从开始到部署成功全流程
  • Python day30
  • Linux重置root用户密码
  • 单片机,主循环和中断资源访问冲突的案例
  • 【51单片机】7. 串口通信、单片机向电脑发送数据电脑发送数据点亮LED灯Demo
  • C#迭代器
  • C# 使用HttpListener时候异常(此平台不支持此操作:System.PlatformNotSupportedException)
  • 基于大模型预测单纯性孔源性视网膜脱离的技术方案
  • 解析OpenFOAM polymesh网格文件的C/C++程序实现