ZBLOG

package com.example.test001.interceptors; import com.example.test001.utils.JwtUtils; import com.example.test001.utils.ThreadLocalUtil; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http...

request.getHeader("Authorization") 返回空值可能有以下几种原因:

1. 请求未携带 Authorization 头

  • 前端未正确设置请求头,例如:
    1. // axios 示例
    2. axios.get(url, {
    3. headers: {
    4. 'Authorization': 'Bearer your_token_here' // 确保字段名和值正确
    5. }
    6. });
  • 使用 Postman 测试时需手动添加 Authorization 头。

2. 大小写问题

  • HTTP 头的名称是大小写不敏感的,但某些框架可能对大小写有要求。确保前后端统一使用 Authorization(首字母大写)。

3. 跨域问题(CORS)

  • 如果是跨域请求,浏览器会先发送 OPTIONS 预检请求,此时不会携带自定义头(如 Authorization)。需要后端显式允许该头:
    1. // Spring Boot CORS 配置示例
    2. @Configuration
    3. public class CorsConfig implements WebMvcConfigurer {
    4. @Override
    5. public void addCorsMappings(CorsRegistry registry) {
    6. registry.addMapping("/**")
    7. .allowedHeaders("Authorization", "Content-Type") // 允许的头部字段
    8. .exposedHeaders("Authorization"); // 暴露给前端的字段
    9. }
    10. }

4. 过滤器/拦截器顺序问题

  • Spring Boot中若其他过滤器(如CORS过滤器)提前拦截了请求,可能导致后续拦截器获取不到头部。调整过滤器的执行顺序:
    1. @Bean
    2. public FilterRegistrationBean<YourFilter> yourFilter() {
    3. FilterRegistrationBean<YourFilter> bean = new FilterRegistrationBean<>();
    4. bean.setOrder(Ordered.HIGHEST_PRECEDENCE); // 设置优先级
    5. return bean;
    6. }

5. 代理服务器或网关剥离了头部

  • Nginx/Apache等代理可能默认移除下划线开头的头部或自定义头部。检查代理配置:
    1. location / {
    2. proxy_pass http://backend;
    3. proxy_set_header Authorization $http_authorization; # 显式传递头部
    4. }

调试建议

  1. 打印所有请求头:确认是否真的缺失。
    1. Collections.list(request.getHeaderNames()).forEach(name ->
    2. System.out.println(name + ": " + request.getHeader(name)));
  2. 检查网络请求:通过浏览器开发者工具(F12)查看请求头是否实际发送。
  3. 单元测试验证:直接模拟请求测试拦截器逻辑。

如果问题仍未解决,可以提供更多上下文(如前端代码、网络请求截图),我会进一步协助分析!


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=23385

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?