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

为什么AuthenticationManager抛出StackOverflower错误?

田硕
2023-03-14

我得到StackOverflow Error而调用身份验证Manger.authenticate()

Java语言lang.StackOverflowerr:org处为null。阿帕奇。平民登录中。日志适配器$Slf4jLog。isDebugEnabled(LogAdapter.java:300)~[spring-jcl-5.1.10.RELEASE.jar:5.1.10.RELEASE]位于org。springframework。安全身份验证。ProviderManager。在org上验证(ProviderManager.java:162)~[spring-security-core-5.1.6.RELEASE.jar:5.1.6.RELEASE]。springframework。安全配置。注释。网状物配置Web安全配置适配器$AuthenticationManagerDelegator。验证(websecurityconfig-adapter.java:503)~[spring-security-config-5.1.6.RELEASE.jar:5.1.6.RELEASE]

我正在尝试在我的应用程序中实现JWT。我已经创建了JWTTOkenUtil,Filter,Controller。但只有身份验证管理器不工作。我也尝试过使用CustomAuthenticationManager,但出现了相同的错误。

文件onfig.java

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class AppConfig  extends WebSecurityConfigurerAdapter{

    @Autowired
    private JwtUserDetailService jwtUserDetailService;

    @Autowired
    private JwtAuthenticationProvider jwtAuthenticationProvider;

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }

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

     //auth.userDetailsService(jwtUserDetailService).passwordEncoder(passwordEncoder());
    }

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
            .authorizeRequests().antMatchers("/version").permitAll()
            .anyRequest().authenticated()
            .and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
        http.addFilterBefore(jwtRequestFilter(), UsernamePasswordAuthenticationFilter.class);
    }

    @Bean
    public JwtRequestFilter jwtRequestFilter() {
            return new JwtRequestFilter();
    }
}

共有3个答案

时宾实
2023-03-14

您需要重写WebSecurity配置适配器类的authenticationManagerBean()方法,而不是重写authenticationManager()方法。

这对我来说是一个工作配置。

@RequiredArgsConstructor
@EnableWebSecurity
public class SecurityConfigurer extends WebSecurityConfigurerAdapter {

    private final CustomUserDetailsService customUserDetailsService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(customUserDetailsService);
    }

    @Override
    protected void configure (HttpSecurity http) throws Exception{
        http
                .csrf()
                .disable()
                .authorizeRequests()
                .antMatchers("/authenticate").permitAll()
                .anyRequest().authenticated();
    }

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


    @Bean
    public PasswordEncoder passwordEncoder(){
        return NoOpPasswordEncoder.getInstance();
    }
}
澹台锐
2023-03-14

您过度隐藏了错误的方法authenticationManager(),它应该是authenticationManagerBean()。

邓浩漫
2023-03-14

WebSecurityConfigrerAdapter的身份验证管理器()和身份验证ManagerBean()是两种不同的方法,您正在调用超级类的身份验证ManagerBean()方法,据我所知,它依赖于身份验证管理器()方法。这反过来会创建方法的循环调用,最终导致StackOverflow Error异常。

您可以尝试不重写AuthenticationManager AuthenticationManager()方法,或者在这样做时返回可靠的实现。

 类似资料:
  • 我想从我的对象生成一个JSON字符串: 每次我尝试这样做,我得到这个错误: 这些是我的BomItem类的属性: 我引用的BomModule类的属性: 知道是什么导致了这个错误吗?我该如何修复它?

  • 我正在尝试使用Codename One构建服务器为J2ME构建我的应用程序。这一直运行良好,但现在我每次都会遇到构建错误。这是日志的摘录,其中在准备输出jar时提到了StackOoverflow Error: 最后一行又重复了1023次,一直到文件的结尾。 我已经将我的源代码重绕到我以前构建的版本,现在也失败了,出现了同样的错误消息。 这可能是我的开发环境发生了变化,还是构建服务器出现了问题? 任

  • 我正在编码一个不和谐机器人,它检查用户是否在我的不和谐服务器上,以及他是否有某个角色。然而,我得到一个错误消息,如果用户不是在我的不和,尽管使用捕捉。我有以下代码: 现在,错误消息是: (节点: 15184)UnhandledPromiseRejtionWarning: DiscordAPIError:未知成员在请求Handler.execute(c:\用户\用户\桌面\DiscordBot\My

  • 问题内容: final Multimap terms = getTerms(bq); for (Term t : terms.keySet()) { Collection C = new HashSet(terms.get(t)); if (!C.isEmpty()) { for (Iterator it = C.iterator(); it.hasNext();) { BooleanClause

  • 问题内容: 我试图将两个’Employee’对象添加到TreeSet中: 但是它抛出一个ClassCastException: 但是,如果我仅将一个对象添加到TreeSet中: 或者,如果我改用HashSet: 那就成功了。为什么会发生异常,我该如何解决? 问题答案: 要么必须实现,或者你需要提供一个比较创建时。 在文档中对此进行了详细说明: 插入排序集中的所有元素都必须实现接口(或被指定的比较器

  • 问题内容: 将字符串解析为字节时出现异常 问题答案: 这是因为默认的parse方法要求使用十进制格式的数字来解析十六进制数字,请使用以下parse: 其中16是解析的基础。 至于您的评论,您是对的。字节的最大值为0x7F。因此,您可以将其解析为并执行二进制与操作以获得LSB,即您的字节: