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
相关产品推荐
相关产品推荐

