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

标签 spring-boot spring-security spring-oauth2

我正在查看最新的Spring Authorization Server v0.2.0并发现在提供的 sample authorizationserver 上配置了两个 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() 我应该更改哪一个?

最佳答案

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

例如,当客户端重定向到/oauth2/authorize时并且用户未通过身份验证,用户将被重定向到 /login ,它将匹配 SecurityFilterChainDefaultSecurityConfig 定义不是AuthorizationServerConfig .

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

关于spring-boot - 为什么Spring Authorization Server中配置了两个formLogin 示例代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69126874/

相关文章:

java - 如何将 OAuth 2 token 映射到资源服务器中的 UserDetails 对象?

java - Spring Boot 错误没有可用的 'javax.persistence.EntityManagerFactory' 类型的合格 bean

java - JPA DELETE 操作中的一对多关系不起作用

java - 构建安全框架

java - 为什么在 https 中要加上 Spring Security 的 80 端口?

spring-security - Spring Security OAuth2 资源服务器重试/弹性

java - 警告 : Encoded password does not look like BCrypt

java - Spring MVC RestController 不明确的 PathVariable 映射

java - JSP 输入值到 Java 方法 -> HttpServletRequest 给出 NULL 值

jsf - jsf中的spring acl