gpt4 book ai didi

java - 具有自定义身份验证过滤器的 WebSecurityConfigurerAdapter - 依赖性问题

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

我有 SPNEGO 的 spring 安全配置,它正在“破解”。它看起来如下:

@Configuration
@EnableWebSecurity
public class SpnegoConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http
...
.addFilterBefore(
spnegoAuthenticationProcessingFilter(authenticationManagerBean()),
BasicAuthenticationFilter.class); // 1
}

@Override
@Autowired // 3
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth
.authenticationProvider(kerberosAuthenticationProvider())
.authenticationProvider(kerberosServiceAuthenticationProvider());
}


@Bean
public SpnegoAuthenticationProcessingFilter spnegoAuthenticationProcessingFilter(
AuthenticationManager authenticationManager) { // 2
SpnegoAuthenticationProcessingFilter filter =
new SpnegoAuthenticationProcessingFilter();
filter.setAuthenticationManager(authenticationManager);
return filter;
}
...
}

发生了什么:

  • 我需要添加 spnegoAuthenticationProcessingFilter (1)
  • 此过滤器依赖于 authenticationManager (2)
  • 我需要添加身份验证提供程序 (3)

点在这个类中,它是 WebSecurityConfigurerAdapter 我正在覆盖 2 个方法:

  1. configure(HttpSecurity http) - 这依赖于通过自定义过滤器构建的 AuthenticationManager
  2. configure(AuthenticationManagerBuilder auth) - 这显然与尚未构建的 AuthenticationManager 相关 - 我们正在构建它

如果我在方法 (3) 上没有 @Autowired,则 AuthenticationManager 构建得太早,我添加了 AuthenticationProvider没有效果。身份验证失败,异常情况是没有合适的 AuthenticationProvider

使用 @Autowired 可以正常工作,但如果感觉不对。我什至不确定为什么它会在那时开始工作。

请就正确的方法提出建议。

编辑:它实际上可以在没有@Autowired 的情况下工作。但重点在于公认的答案。如果您在 @Configuration 中依赖于 AuthenticationManager,请确保通过 authenticationManagerBean() 方法公开或引用它。

最佳答案

您使用了错误的 AuthenticationManager

如果你想使用 SpnegoConfig 中的 AuthenticationManager 进行依赖注入(inject),你必须公开它,参见 JavaDoc :

Override this method to expose the AuthenticationManager from configure(AuthenticationManagerBuilder) to be exposed as a Bean. For example:

@Bean(name name="myAuthenticationManager")
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}

如果你想配置全局AuthenticationManager,你必须 Autowiring AuthenticationMangerBuilder,见Spring Security 3.2.0.RC2 Released

For example, if you want to configure global authentication (i.e. you only have a single AuthenticationManager) you should autowire the AuthenticationMangerBuilder:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) {
// ... configure it ...
}

关于java - 具有自定义身份验证过滤器的 WebSecurityConfigurerAdapter - 依赖性问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39259086/

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