首页 > 解决方案 > 为什么在 Spring Authorization Server 示例代码中配置两个 formLogin

问题描述

我正在检查最新的Spring Authorization Server v0.2.0 并发现在提供的示例formLogin()authenticationserver上配置了两个。

一种是AuthorizationServerConfig.java

    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http) throws Exception {
        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
        return http.formLogin(Customizer.withDefaults()).build();
    }

另一个是DefaultSecurityConfig.java

    @Bean
    SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeRequests(authorizeRequests ->
                authorizeRequests.anyRequest().authenticated()
            )
            .formLogin(withDefaults());
        return http.build();
    }

我的问题是:

标签: spring-bootspring-securityspring-oauth2

解决方案


formLogin()配置的原因AuthorizationServerConfig纯粹是“方便配置”,因为它将设置LoginUrlAuthenticationEntryPoint并执行重定向到/login当前请求未通过身份验证时。

例如,当客户端被重定向到/oauth2/authorize并且用户未通过身份验证时,用户将被重定向到/login,这将与NOTSecurityFilterChain定义的匹配。DefaultSecurityConfigAuthorizationServerConfig

基本上,formLogin()inAuthorizationServerConfig的唯一目的是执行重定向到/login,最终匹配到DefaultSecurityConfig SecurityFilterChain.


推荐阅读