Spring Boot后端接收Unirest POST请求返回302状态码问题求助
解决Spring Boot POST接口返回302重定向的问题
我来帮你分析下这个302重定向的问题,这在Spring Boot结合Spring Security的场景里很常见,咱们一步步定位解决:
1. 最可能的原因:Spring Security的CSRF保护拦截
Spring Security默认会开启CSRF(跨站请求伪造)保护,对于POST、PUT这类修改型请求,会要求客户端携带CSRF Token。如果你的请求里没带这个Token,服务端就会触发重定向(通常是跳转到登录页),返回302状态码。
对应的解决方法:
- 临时关闭CSRF(仅测试环境用):
如果是开发测试阶段,可以先关闭CSRF保护来验证问题。在你的Spring Security配置类里添加如下代码:@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http .csrf().disable() // 关闭CSRF保护 .authorizeRequests() .antMatchers("/acl").permitAll() // 允许/acl接口匿名访问(如果不需要登录验证的话) .anyRequest().authenticated(); } } - 客户端携带CSRF Token(生产环境推荐):
生产环境建议保留CSRF保护,需要客户端先从服务端获取CSRF Token,再在请求头里携带。用Unirest的话可以这么做:// 先从Cookie中获取XSRF-TOKEN(登录后服务端会设置这个Cookie) CookieStore cookieStore = Unirest.getCookieStore(); String xsrfToken = null; for (Cookie cookie : cookieStore.getCookies()) { if ("XSRF-TOKEN".equals(cookie.getName())) { xsrfToken = cookie.getValue(); break; } } // 发送POST请求时添加X-XSRF-TOKEN请求头 HttpResponse<String> asString = Unirest.post(ACL_URL) .header("accept", "application/json") .header("X-XSRF-TOKEN", xsrfToken) .field("aclTitle", title) .field("roles", roles) .asString();
2. 检查会话验证与登录状态
你的Controller里调用了isSessionValid()方法来验证会话,如果这个方法判断会话无效,同时Spring Security配置了未登录请求重定向到登录页,也会返回302。
对应的解决方法:
- 确保客户端携带有效会话Cookie:
Unirest默认不会自动保存Cookie,你需要配置Cookie存储,或者手动在请求里添加登录后的JSESSIONIDCookie:// 配置Unirest自动保存Cookie Unirest.config().cookieStore(new CookieStore()); // 先发送登录请求,再发送ACL请求,Cookie会自动携带 - 允许接口匿名访问(如果不需要登录):
如果这个创建ACL的接口不需要用户登录,就在Security配置里把/acl路径设置为允许匿名访问,参考上面的antMatchers("/acl").permitAll()代码。
3. 检查HTTP/HTTPS协议不一致
你看到的重定向地址是https://localhost:8443/acl,如果你的客户端请求的是HTTP协议(比如http://localhost:8080/acl),而服务端配置了强制HTTPS,就会触发302重定向到HTTPS地址。
对应的解决方法:
确保客户端请求的URL和服务端一致,直接使用https://localhost:8443/acl作为请求地址。
验证步骤
建议按照以下顺序排查:
- 先把客户端请求URL改成HTTPS,看是否还返回302;
- 临时关闭CSRF保护,测试接口是否能正常返回200;
- 如果关闭CSRF后正常,再切换到生产环境的CSRF Token携带方案;
- 最后检查会话登录状态的问题。
内容的提问来源于stack exchange,提问作者Mohammed Housseyn Taleb
相关产品推荐
相关产品推荐

