【问题标题】:Spring Boot 3: skip internal redirect behavior跳过重定向行为
【发布时间】: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


【解决方案1】:

您需要在路由处理中抛出您的异常,并首先通过发出代码 http_code=302 和 http_text=redirect_bla_bla_bla 来处理您自己的处理程序。其次,您需要在重定向中使用 OnlyIn 交换模式。

【讨论】:

    猜你喜欢
    • 2020-10-14
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多