为什么Spring Authorization Server示例代码中配置了两个formLogin

问题描述 投票:0回答:1

我正在检查最新的 Spring 授权服务器 v0.2.0 并发现在提供的

示例授权服务器
上配置了两个 formLogin()

一个是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();
    }

我的问题是:

  • 为什么配置了两个
    formLogin()
  • 如果我想定制
    formLogin()
    我应该更改哪一个?
spring-boot spring-security spring-oauth2 spring-authorization-server
1个回答
3
投票

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

例如,当客户端重定向到

/oauth2/authorize
并且用户未经过身份验证时,用户将被重定向到
/login
,这将匹配由
SecurityFilterChain
NOT
DefaultSecurityConfig
定义的
AuthorizationServerConfig

基本上,

formLogin()
中的
AuthorizationServerConfig
的唯一目的是执行到
/login
的重定向,最终与
DefaultSecurityConfig
SecurityFilterChain
匹配。

© www.soinside.com 2019 - 2024. All rights reserved.