gpt4 book ai didi

java - StackOverflowError 尝试在 Spring WebSecurityConfigurerAdapter 中公开 AuthenticationManager

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:32:28 29 4
gpt4 key购买 nike

我正在尝试通过扩展 WebSecurityConfigurerAdapter 来创建 Spring Security 配置,基本上是这样的:

@EnableWebSecurity
@Configuration
public class StackOverflowSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {

auth.authenticationProvider(myUsernamePasswordProvider());
auth.authenticationProvider(mySecurityTokenProvider());

super.configure(auth);
}

@Override
@Bean
public AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManagerBean();
}

@Bean
public MyPreAuthenticatedProcessingFilter myAuthenticationFilter() throws Exception {
MyPreAuthenticatedProcessingFilter myAuthenticationFilter = new MyPreAuthenticatedProcessingFilter();
myAuthenticationFilter.setAuthenticationManager(authenticationManager());

return myAuthenticationFilter;
}

}

我看到了这个:

SEVERE: Servlet.service() for servlet [servlet] in context with path [/MyApp] threw exception [Filter execution threw an exception] with root cause
[INFO] [talledLocalContainer] java.lang.StackOverflowError
[INFO] [talledLocalContainer] at org.springframework.security.authentication.AnonymousAuthenticationProvider.supports(AnonymousAuthenticationProvider.java:79)
[INFO] [talledLocalContainer] at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:164)
[INFO] [talledLocalContainer] at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:469)
[INFO] [talledLocalContainer] at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
[INFO] [talledLocalContainer] at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:469)
[INFO] [talledLocalContainer] at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
[INFO] [talledLocalContainer] at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:469)
[INFO] [talledLocalContainer] at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
[INFO] [talledLocalContainer] at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:469)
[INFO] [talledLocalContainer] at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
[INFO] [talledLocalContainer] at org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter$AuthenticationManagerDelegator.authenticate(WebSecurityConfigurerAdapter.java:469)
[INFO] [talledLocalContainer] at org.springframework.security.authentication.ProviderManager.authenticate(ProviderManager.java:199)
...

我已经尝试更改我能想到的所有内容以正确地公开 AuthenticationManager 而不会出现 StackOverflow 错误,但我仍然卡住了。我唯一发现的就是这个缺陷,https://github.com/spring-projects/spring-security/issues/2732 ,在 Spring Security 中,有人在“没有配置身份验证时尝试将 AuthenticationManager 公开为 Bean 的无效配置”时看到了同样的问题。不幸的是,我不知道这到底意味着什么或如何解决这个问题。

这个 Spring Security 配置适用于 Spring XML 配置,这是我迁移到 Spring Java Config 的尝试。有没有更好的方法来配置我的 Spring Security 和/或将 AuthenticationManager 暴露给我的自定义身份验证过滤器?

最佳答案

我终于明白了。问题是我覆盖了错误的方法。我做了:

@Override
@Bean
public AuthenticationManager authenticationManager() throws Exception {
return super.authenticationManagerBean();
}

代替:

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

我最终覆盖了一个类似但不正确的方法。 authenticationManager() 方法用于对 AuthenticationManager 进行一些配置,authenticationManagerBean() 方法用于将 AuthenticationManager 公开为可以 Autowiring 和使用的 Spring Bean。执行我所做的操作会导致必要的配置不会发生,而是以导致堆栈溢出的方式链接 AuthenticationManagers。

关于java - StackOverflowError 尝试在 Spring WebSecurityConfigurerAdapter 中公开 AuthenticationManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42729981/

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