当前位置: 首页 > 知识库问答 >
问题:

Spring Security:谁将AuthentiationManagerBuilder传递给WebSecurityConfigrerAdapter配置方法?

裴心思
2023-03-14

所以我正在研究Spring Security性的实现。我遇到了一段我无法理解的代码。因此,根据文档,当我们想要定制Spring使用的AuthenticationManager时,需要重写以下方法。

受保护的无效配置抛出java.lang.异常

我的问题是谁在这里调用这个方法并传递身份验证管理器构建器实例。我看到的工作示例没有创建/公开任何AuthentiationManagerBuilder bean。

另外,我在文档中看到了以下内容:,

受保护的AuthenticationManager AuthenticationManager()抛出java。获取要使用的AuthenticationManager。

默认策略是如果覆盖configure(AuthenticationManagerBuilder)方法以使用传入的AuthenticationManagerBuilder。否则,按类型自动连接AuthenticationManager。

重写的方法是一个void方法,这可能就是为什么我对它正在做/应该做的事情感到更加困惑的原因。

任何帮助/指针高度赞赏。我知道它的工作,我只是似乎不知道如何。非常感谢。

共有1个答案

燕嘉颖
2023-03-14

假设下面是你遇到的代码

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(MyAuthenticationProvider);
    }
}

请注意

  1. WebSecurityConfigureAdapter为创建WebSecurityConfigurer实例提供了方便的基类
  2. WebSecurityConfigureAdapter实现是一种配置,因为它用@EnableWebSecurity注释

在这里

@EnableWebSecurity使用@EnableGlobalAuthentication进行元注释

@Retention(value=RUNTIME)
 @Target(value=TYPE)
 @Documented
 @Import(value={WebSecurityConfiguration.class,org.springframework.security.config.annotation.web.configuration.SpringWebMvcImportSelector.class,org.springframework.security.config.annotation.web.configuration.OAuth2ImportSelector.class})
 @EnableGlobalAuthentication
 @Configuration
public @interface EnableWebSecurity

和@EnableGlobalAuthentication导入AuthenticationConfiguration

@Retention(value=RUNTIME)
 @Target(value=TYPE)
 @Documented
 @Import(value=AuthenticationConfiguration.class)
 @Configuration
public @interface EnableGlobalAuthentication

AuthenticationConfiguration具有将AuthenticationManagerBuilder注册为bean的以下代码段

@Bean
public AuthenticationManagerBuilder authenticationManagerBuilder(
            ObjectPostProcessor<Object> objectPostProcessor, ApplicationContext context) {
        ...
    }
 类似资料:
  • 问题内容: 一个讨论是关于将空值传递给方法。 它代表了不同的处理方式: 我更喜欢断言方法,但是我不喜欢断言默认情况下处于关闭状态的事实。 该书最后指出: 在大多数编程语言中,没有很好的方法来处理调用者意外传递的null。因为是这种情况,所以合理的方法是默认情况下禁止传递null。 它实际上并没有涉及如何实施此限制? 无论哪种方式,您中的任何人都有强烈的意见。 问题答案: 在这里,使用断言和引发异常

  • 问题内容: 如何将整个数组传递给方法? 如何正确执行此操作? 问题答案: 你做这个: 只需将其作为其他任何变量传递即可。 在Java中,数组是通过引用传递的。

  • 这是我的第一个Java应用程序。我正在尝试创建一个产品(键)和它们的价格(值)的地图。文档上说我不能用doubles换钱,所以我得用bigdecimal。我现在完全不知道如何在我的方法和地图中使用BigDecimal。 寄存器类: 主类:

  • 问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具

  • 问题内容: 我是webpack的新手,几乎可以解决所有构建部分的问题,但是现在的问题是,我想将环境变量从.env文件传递到webpack config,以便可以通过插件将这些变量传递给我的构建文件。 目前,我能够将环境变量直接从webpack传递到我的构建中。请查看下面我在webpack中使用的代码。 我的构建脚本是 问题答案: 您可以为此目的使用包装 参考:https : //www.npmjs