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

Spring Security整合OAuth2出现重定向循环问题求助

解决Spring OAuth2登录后重定向循环问题

问题根源

你自定义的/oauth2/callback控制器完全多余,Spring Security的oauth2Login()已经内置处理授权码流程的回调逻辑——包括获取token、构建认证会话、跳转回原请求页面。你手动处理回调后重定向到受保护页面时,认证会话还未被Spring Security正确建立,导致访问/my-gui/index.html时再次触发认证流程,形成循环。

修复步骤

  1. 删除自定义的OAuthController
    直接删掉整个OAuthController类,让Spring Security接管回调处理。

  2. 调整SecurityFilterChain配置
    配置oauth2Login的默认成功跳转页(可选,不配置的话Spring会自动跳转到用户最初请求的页面):

@Configuration
public class OAuthSecurityConfiguration {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.anonymous().disable()
                .authorizeRequests()
                .antMatchers("/my-gui/**").authenticated()
                .anyRequest().permitAll()
                .and()
                .oauth2Login(oauth2 -> oauth2
                        // 登录成功后强制跳转到指定页面,第二个参数设为true表示总是跳转,不管原请求
                        .defaultSuccessUrl("/my-gui/index.html", true)
                );
        return http.build();
    }

    @Bean
    WebClient webClient(ClientRegistrationRepository clientRegistrationRepository, OAuth2AuthorizedClientRepository authorizedClientRepository) {
        ServletOAuth2AuthorizedClientExchangeFilterFunction oauth2 = new ServletOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrationRepository, authorizedClientRepository);
        oauth2.setDefaultOAuth2AuthorizedClient(true);
        return WebClient.builder()
                .apply(oauth2.oauth2Configuration())
                .build();
    }
}
  1. 修正application.yml中的redirect-uri
    Spring Security默认的回调路径格式为http://localhost:1234/oauth2/code/{your-client-registration-id},请将redirect-uri修改为对应路径,比如你的client id是oauth-client,则配置:
authorization-grant-type: authorization_code
redirect-uri: http://localhost:1234/oauth2/code/oauth-client

如果你坚持使用自定义的/oauth2/callback,需要在oauth2Login中显式配置:

.oauth2Login(oauth2 -> oauth2
        .redirectUri("/oauth2/callback")
        .defaultSuccessUrl("/my-gui/index.html", true)
)

原理说明

删除自定义回调后,Spring Security会在回调时自动完成认证会话的构建,此时访问/my-gui/index.html时,SecurityContext中已有合法的认证信息,不会再触发重定向到SSO的流程,循环问题即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 02:40:15