版本
spring-security:6.2.1
源码
org.springframework.security.config.annotation.web.configurers.oauth2.client.OAuth2LoginConfigurer
public void init(B http) throws Exception {...if (this.loginPage != null) {// 使用自定义登录页面super.loginPage(this.loginPage);super.init(http);}else {// 获取登录连接Map<String, String> loginUrlToClientName = this.getLoginLinks();if (loginUrlToClientName.size() == 1) {// 如果只配置了一个客户端,则自动跳转到提供的登录页面this.updateAuthenticationDefaults();this.updateAccessDefaults(http);String providerLoginPage = loginUrlToClientName.keySet().iterator().next();this.registerAuthenticationEntryPoint(http, this.getLoginEntryPoint(http, providerLoginPage));}else {super.init(http);}}...// 配置OpenId Connect 认证提供者...// 初始化默认登录过滤器 this.initDefaultLoginFilter(http);}// 获取登录连接private Map<String, String> getLoginLinks() {...// 授权请求uri 默认为"/oauth2/authorization"String authorizationRequestBaseUri = (this.authorizationEndpointConfig.authorizationRequestBaseUri != null)? this.authorizationEndpointConfig.authorizationRequestBaseUri: OAuth2AuthorizationRequestRedirectFilter.DEFAULT_AUTHORIZATION_REQUEST_BASE_URI;Map<String, String> loginUrlToClientName = new HashMap<>();// 使用授权码模式的客户端构造授权请求连接 "/oauth2/authorization/客户端注册ID"clientRegistrations.forEach((registration) -> {if (AuthorizationGrantType.AUTHORIZATION_CODE.equals(registration.getAuthorizationGrantType())) {String authorizationRequestUri = authorizationRequestBaseUri + "/" + registration.getRegistrationId();loginUrlToClientName.put(authorizationRequestUri, registration.getClientName());}});return loginUrlToClientName;}// 初始化默认登录过滤器private void initDefaultLoginFilter(B http) {// 默认登录页生成过滤器(同时支持用户名密码表单, OAuth2, SAML2 模式)DefaultLoginPageGeneratingFilter loginPageGeneratingFilter = http.getSharedObject(DefaultLoginPageGeneratingFilter.class);if (loginPageGeneratingFilter == null || this.isCustomLoginPage()) {return;}// 启用OAuth2模式loginPageGeneratingFilter.setOauth2LoginEnabled(true);// 设置OAuth2认证连接loginPageGeneratingFilter.setOauth2AuthenticationUrlToClientName(this.getLoginLinks());loginPageGeneratingFilter.setLoginPageUrl(this.getLoginPage());loginPageGeneratingFilter.setFailureUrl(this.getFailureUrl());}