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

Spring Security 6:单OAuth2客户端下跳过登录页直接重定向至SSO

Spring Security 6 恢复OAuth2 SSO自动重定向行为

升级到Spring Security 6并使用oauth2Login配置单OAuth2客户端后,默认访问/login会显示Spring生成的客户端选择登录页,要恢复旧版@EnableOAuth2Sso的自动重定向到SSO站点的行为,可以通过以下两种方案实现:

方案1:通过SecurityFilterChain配置全局自动重定向

在Spring Security配置类中,直接指定未认证请求的入口点为对应OAuth2客户端的授权路径,这样所有未认证请求(包括访问/login)都会直接跳转到SSO站点:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .anyRequest().authenticated()
            )
            .oauth2Login(oauth2 -> oauth2
                .defaultSuccessUrl("/", true)
            )
            .exceptionHandling(exceptions -> exceptions
                // 指定未认证时直接跳转到目标客户端的授权请求路径
                .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/oauth2/authorization/myclient"))
            );
        return http.build();
    }
}

注意:代码中的myclient需要和你配置文件中spring.security.oauth2.client.registration下的客户端ID保持一致。

方案2:自定义/login路径的重定向逻辑

添加一个控制器,将/login请求直接重定向到OAuth2客户端的授权路径,同时在Security配置中允许/login路径的匿名访问:

1. 编写重定向控制器

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class LoginRedirectController {

    @GetMapping("/login")
    public String redirectToOAuth2Login() {
        // 重定向到目标客户端的授权请求路径
        return "redirect:/oauth2/authorization/myclient";
    }
}

2. 调整SecurityFilterChain配置

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/login").permitAll()
                .anyRequest().authenticated()
            )
            .oauth2Login(oauth2 -> oauth2
                .defaultSuccessUrl("/", true)
            );
        return http.build();
    }
}

这样用户访问/login时,会直接被重定向到SSO站点的授权页面,和旧版@EnableOAuth2Sso的行为完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:12:44