【发布时间】:2022-11-29 13:52:46
【问题描述】:
升级到 Spring Boot 3 后,我遇到了一个奇怪的行为。我有一个由外部服务调用并返回 302 状态代码的端点。看看下面的代码 sn-p。
@GetMapping("/callback")
@Hidden
@SneakyThrows
public void callback(@NotNull @RequestParam(name = "code") String authorizationCode,
@NotNull @RequestParam(name = "state") String state,
HttpServletResponse httpResponse) {
try {
...
httpResponse.addCookie(jwtTokenCookie););
httpResponse.sendRedirect(state.targetUri());
} catch (IntegrationException e) {
throw new ControllerException(BAD_REQUEST, e);
}
}
问题是我不再收到 302 状态码。相反,Spring 在内部执行实际的重定向并返回 targetUri() 端点调用的结果。但我不想那样。我需要接收带有实际重定向值的 302 状态码。
我试着重构一下代码:
final var jwtTokenCookie = cookieService.createJwtCookie(userContext);httpResponse.addCookie(jwtTokenCookie);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setLocation(new URI(mtsSsoState.targetUri()));
return new ResponseEntity<>(httpHeaders, FOUND);
但它没有用。似乎 Spring Security 已经注册了一些过滤器来检查所有 3xx 响应。我能以某种方式将其关闭吗?
【问题讨论】:
-
使用标头显示您的请求和响应。服务器不解析重定向,您的客户端会解析。
标签: java spring spring-boot redirect spring-security