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

springboot获取nignx中的header请求头

问题:nginx配置文件中通过proxy_set_header设置的请求头,springboot后端如何接受到呢?一定需要一个拦截器才行吗?

答:需要解释Spring Boot中获取请求头的方式。通常,在Controller方法中可以通过@RequestHeader注解直接获取。或者通过HttpServletRequest对象的getHeader方法。不需要强制使用拦截器,拦截器只是一种方式,但不是必须的。拦截器可以用于全局处理,但获取头可以直接在Controller里。

 

在 Spring Boot 中接收 Nginx 通过 proxy_set_header 设置的请求头(如 X-Real-IP)完全不需要额外编写拦截器。你可以直接在 Controller 方法参数中使用 @RequestHeader 注解,或者通过 HttpServletRequest 对象获取。

1. 直接获取(最常见)

@RestController
public class MyController {@GetMapping("/test")public String getRealIp(@RequestHeader(value = "X-Real-IP", required = false) String realIp) {// realIp 就是 Nginx 传过来的客户端真实 IPreturn "Real IP: " + realIp;}
}

required = false 避免该头不存在时抛出异常。

2. 通过 HttpServletRequest 获取

@GetMapping("/test")
public String getRealIp(HttpServletRequest request) {String realIp = request.getHeader("X-Real-IP");return "Real IP: " + realIp;
}

3. 如果需要在多个地方使用(例如日志、鉴权)

虽然拦截器不是必须的,但你可以用拦截器(或过滤器)统一获取请求头并存入日志上下文或 ThreadLocal,方便全局使用。例如:

@Component
public class IpInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {String realIp = request.getHeader("X-Real-IP");// 存入 MDC 或自定义上下文MDC.put("clientIp", realIp);return true;}
}

但这只是为了代码复用,并非获取请求头的必要条件。

注意事项

  • 头名称大小写不敏感:X-Real-IPx-real-ip 都可以。

  • 如果头名包含下划线:某些容器(如 Tomcat)默认会忽略带下划线的头。Spring Boot 2.x 内置的 Tomcat 可通过配置 server.tomcat.allow-underscores-in-headers=true 解决。但 X-Real-IP 使用短横线,无此问题。

  • 真实 IP 的更标准做法:Spring Boot 也内置了对 X-Forwarded-For 的支持。如果使用 X-Forwarded-For,可以通过 request.getRemoteAddr() 获取真实 IP(需配置 server.forward-headers-strategy=framework 或 native)。但 X-Real-IP 同样有效。

http://www.jsqmd.com/news/607240/

相关文章:

  • Unity微信小游戏包体瘦身实战:搞定代码剪裁与TMP字体优化,首包加载快一倍
  • 第6章:树模型
  • 短视频SEO过程中容易犯的错误有哪些_短视频SEO最佳实践有哪些
  • 业内人士推荐:这几场国际半导体展会与盛会值得列入行程 - 品牌2026
  • Singularity未来展望:从Singularity到Apptainer的演进路线
  • Qwen3-14B私有部署入门:Visual Studio Code远程开发与调试配置
  • Http4s高级特性:WebSocket、Server-Sent Events与流式处理终极指南
  • 军工/汽车/消费电子全覆盖:MEMS加速度计核心厂商与应用场景匹配手册 - 深度智识库
  • 【Blender进阶】VSCode调试大型项目:从模块导入到参数解析的实战避坑指南
  • 2025届必备的十大降重复率工具横评
  • 中小企业必看:低成本搭建ISO 9001质量管理体系的5个关键步骤
  • nuScenes 点云语义分割:LidarSeg 模块深度解析
  • 学习记录:机器学习入门案例——波士顿房价预测(三)-波士顿房价预测与加州房价预测对比
  • 直播保存新方案:多平台支持的自动录制工具使用指南
  • SDD 之外是 Harness 吗?
  • SetFit迁移学习最佳实践:如何在不同领域间高效迁移
  • BiliBili-UWP终极指南:Windows平台上的B站原生体验革新
  • 抖音无水印视频下载工具:从内容获取到价值创造的全流程解决方案
  • Bitwarden Web Vault:终极密码管理平台完全指南
  • 一文看懂MEMS陀螺仪:从零偏稳定性到厂商选择,国产替代全攻略 - 深度智识库
  • Arduino-Pico:Raspberry Pi Pico Arduino核心完全指南 - 支持所有RP2040和RP2350开发板
  • 探寻2026年长沙江景房隔音大玻璃、大平层全屋隔音窗源头工厂哪个口碑好 - myqiye
  • DataRoom:企业级数据可视化架构的现代化重构
  • Beyond Compare 5 终极密钥生成指南:RSA加密与授权机制深度解析
  • LeetCode--151.反转字符串中的单词(字符串/双指针法)
  • open-vm-tools 故障排除指南:10个常见问题与解决方案
  • 新手必看!圣女司幼幽-造相Z-Turbo一键部署与快速出图指南
  • intv_ai_mk11可自主部署:脱离云API,数据不出内网的安全文本生成方案
  • CentOS 7.7(基于 RHEL 7 系列)中,账号管理与权限控制是系统安全管理【20260408】005篇--ansible-playbook版本
  • 美国秋招机构怎么选:HM内推+身份规划服务(26年榜单) - Matthewmx