gpt4 book ai didi

java - Spring Security 如何添加/配置 AuthenticationManagerBuilder?

转载 作者:搜寻专家 更新时间:2023-10-30 21:11:07 24 4
gpt4 key购买 nike

我正在研究基于 Spring Security Java 的配置。

我已经创建了我自己的 MyAuthenticationProvider,我想在 ProviderManager 中注册它(AuthenticationManager 的单个实例)。

我发现 ProviderManager 有一个提供商列表,我可以在其中注册我的单例MyAuthenticationProvider.

这是我的配置的一部分:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

我发现AuthenticationManagerBuilderparentAuthenticationManagerdefaultUserDetailsS​​ervice等很多字段。

我的问题是:

  1. 添加 AuthenticationManagerBuilder 身份验证的 @Autowired 注解在哪里?AuthenticationManagerBuilder 是否已在应用程序上下文中创建?
  2. 被注入(inject)的 AuthenticationManagerBuilder 的默认状态是什么?默认情况下,我的意思是是否有一些 parentAuthenticationManagerauthenticationProvider 已经在 AuthenticationManagerBuilder 中注册了?
  3. 如果我要添加 auth.authenticationProvider(MyAuthenticationProvider),这是否意味着我要在 AuthenticationManagerBuilder 中再添加一个提供程序?
  4. 这是什么意思?摘自 Spring 文档

    The name of the configureGlobal method is not important. However, it is important to only configure AuthenticationManagerBuilder in a class annotated with either @EnableWebSecurity, @EnableWebMvcSecurity, @EnableGlobalMethodSecurity, or @EnableGlobalAuthentication. Doing otherwise has unpredictable results.

最佳答案

1 的答案:

@EnableWebSecurity 使用 @EnableGlobalAuthentication 进行元注释

...
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity {
...

@EnableGlobalAuthentication导入AuthenticationConfiguration:

...
@Import(AuthenticationConfiguration.class)
@Configuration
public @interface EnableGlobalAuthentication {
}

AuthenticationConfiguration 中,您会看到声明了一个 AuthenticationManagerBuilder bean:

...
@Bean
public AuthenticationManagerBuilder authenticationManagerBuilder(
ObjectPostProcessor<Object> objectPostProcessor, ApplicationContext context) {
...
}

当您@Autowire 一个AuthenticationManagerBuilder 时,您将得到这个。您可以使用多种方法轻松配置内存中、jdbc、ldap 等身份验证。

2 的答案:

背景:

Spring Security Java 配置通过几个阶段将您的配置与 ApplicationContext 无缝结合。它们结合在一起的一个地方是 getHttp() 方法 WebSecurityConfigurerAdapter

例如,这是一段摘录:

AuthenticationManager authenticationManager = authenticationManager();

authenticationBuilder.parentAuthenticationManager(authenticationManager);

为了让您了解配置顺序是多么“不直接”,上面的 authenticationManager 变量将是:

  • 您通过覆盖 configure(AuthenticationManagerBuilder auth) 添加的身份验证管理器
  • 或者:您在 @Autowired 来自 AuthenticationConfiguration 的 AuthenticationManagerBuilder bean 的方法中添加的身份验证管理器
  • 或者:在上下文中找到的 AuthenticationManager bean

By default state I mean will there be some [...] authenticationProviders already registered in the AuthenticationManagerBuilder

如果查看 AuthenticationConfiguration,您会发现默认情况下,InitializeUserDetailsBeanManagerConfigurer 应用于 AuthenticationManagerBuilder bean。只要它在上下文中找到一个 UserDetailsS​​ervice bean 并且没有添加其他提供者,它就会添加一个 DaoAuthenticationProvider。这就是为什么在 Spring Security reference ,只提供一个@Bean UserDetailsS​​ervice bean 就足够了。

但是一旦您像以前一样添加了身份验证提供程序,“默认”提供程序就不会注册。

关于java - Spring Security 如何添加/配置 AuthenticationManagerBuilder?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25948090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com