You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postman调用AWS EC2上Spring Boot多表单API时JWT认证401问题

解决方案

1. 修正Postman的Host头异常问题

Postman发送的Host头与Swagger请求不一致是关键线索,手动设置请求的Host头为EC2实例的公网IP/域名(与Swagger请求的Host一致):

  • 在Postman的请求Headers面板中,添加或修改Host头,值设为EC2的公网IP(例如1.2.3.4)或绑定的域名。

2. 调整JWT过滤器与MultipartFilter的执行顺序

Spring Boot处理multipart请求时,MultipartFilter默认会优先于自定义JWT过滤器执行,可能导致JWT过滤器无法正确获取请求头中的Token。调整过滤器顺序,让JWT过滤器先执行:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    // 确保JWT过滤器在MultipartFilter之前执行
    http.addFilterBefore(jwtAuthenticationFilter(), MultipartFilter.class);
    
    // 其他Security配置(如禁用CSRF、配置授权规则等)
    http.csrf(csrf -> csrf.disable())
        .authorizeHttpRequests(auth -> auth
            .requestMatchers("/swagger/**", "/v3/api-docs/**").permitAll()
            .anyRequest().authenticated());
    
    return http.build();
}

3. 检查并修正CSRF配置

如果生产环境开启了CSRF校验,multipart请求会触发CSRF验证,而Postman未携带CSRF Token会导致401。若为前后端分离架构,建议禁用CSRF:

http.csrf(csrf -> csrf.disable());

若必须开启CSRF,需在Postman中获取CSRF Token并在请求中携带(可从Swagger的Cookie中提取XSRF-TOKEN,并在Headers中添加X-XSRF-TOKEN头)。

4. 开启Spring Security DEBUG日志排查根因

在application.yml中添加日志配置,获取详细的授权失败原因:

logging:
  level:
    org.springframework.security: DEBUG

查看EC2上的日志,重点关注以下内容:

  • 过滤器链的执行顺序
  • Authorization头是否被正确读取
  • JWT Token的校验过程及失败原因

5. 检查Postman全局设置与代理

  • 关闭Postman的全局代理(设置 > Proxy > 关闭全局代理),避免请求头被代理篡改。
  • 确认Postman的Authorization头拼写正确(应为Authorization: Bearer <token>),且未被Postman的自动化规则覆盖。

6. 配置转发头信任(若EC2前有ALB)

如果EC2部署在AWS ALB之后,需让Spring Security信任转发头,避免因头信息不一致导致授权失败:

@Bean
public ForwardedHeaderFilter forwardedHeaderFilter() {
    return new ForwardedHeaderFilter();
}

或在Security配置中启用转发头支持:

http.forwardedHeaders();

内容的提问来源于stack exchange,提问作者Dustbox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:45:17