Spring Boot生产环境部分Endpoint返回404,本地正常排查
生产环境Spring Boot + Spring Security部分Endpoint返回404(本地正常)
问题现象
请求https://api.example.com/user-profile/auth-data时返回404,响应内容如下:
{ "timestamp": "2024-10-29T15:56:39.325+00:00", "status": 404, "error": "Not Found", "message": "No message available", "path": "/user-profile/auth-data" }
本地环境同代码、同接口完全正常,已配置JWT认证、CORS和CSRF规则;浏览器Network显示is-token-valid等开放Endpoint可正常访问,仅auth-data这类需认证的Endpoint返回404,且已完成OAuth登录,持有token和JSESSIONID Cookie。
关键排查发现
对比控制器代码后确认:使用@RequestHeader("Authorization")或@ModelAttribute("token")作为方法参数的Endpoint都会返回404,移除这些参数后接口可正常调用。
解决排查方向
- 检查Nginx反向代理配置,确认是否正确转发
Authorization请求头。需确保配置中包含:
若Nginx未转发该头,后端无法获取Authorization参数,会因参数绑定失败导致异常,部分场景下会被映射为404而非预期的400/401。proxy_set_header Authorization $http_authorization; proxy_pass http://your-backend-service; - 验证Spring Security配置,确认目标Endpoint的路径是否被正确纳入认证规则,而非被错误拦截或排除。比如检查
securityMatcher、authorizeHttpRequests中的路径匹配规则,避免因路径匹配错误导致请求被拦截后返回404。 - 临时修改参数注解为非必填,测试是否恢复正常:将
@RequestHeader("Authorization")改为@RequestHeader(value = "Authorization", required = false),若接口不再返回404,说明生产环境请求中未携带该头,需排查前端或代理层的头传递问题。 - 检查生产环境的Spring Boot上下文路径配置,确认
server.servlet.context-path是否与本地一致。若生产环境配置了额外的上下文路径,需确保控制器的@RequestMapping路径与请求路径匹配。 - 查看后端生产环境日志,搜索目标接口的请求日志,确认请求是否到达后端、是否有参数绑定异常或认证拦截的日志信息,这能直接定位问题根源。
内容的提问来源于stack exchange,提问作者xRay
相关产品推荐
相关产品推荐

