gpt4 book ai didi

java - 使用自定义身份验证处理 Spring 5 中的 AuthenticationException

转载 作者:行者123 更新时间:2023-11-30 06:04:08 25 4
gpt4 key购买 nike

我正在尝试定义一个默认入口点来处理AuthenticationException

这是我的配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.cors()
.and()
.csrf().disable()
.authorizeRequests()
.anyRequest().authenticated()
.and()
.addFilter(new JWTAuthenticationFilter(authenticationManager()))
.addFilter(new JWTAuthorizationFilter(authenticationManager()))
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.formLogin()
.failureHandler(authenticationFailureHandler())
.permitAll();
}

@Bean
public AuthenticationFailureHandler authenticationFailureHandler() {
return new RestAuthenticationFailureHandler();
}

我已经设置了AuthenticationFailureHandler,据我所知,它可以处理所有AuthenticationException。相反,SimpleUrlAuthenticationFailureHandler 被调用。

我做错了什么?我读了近 30 篇 SO 文章,但没有好的答案。

我还尝试使用自定义 AuthenticationEntryPoint 并且它有效,但我没有得到原始异常,只有一个对我没有任何帮助的通用异常。

我正在使用 Spring 5。

如果有遗漏信息,请告诉我。我相信我正在分享相关代码,因为这似乎是一个配置问题。我在 JWTAuthenticationFilter 中调用 authenticate() 方法后抛出 AuthenticationException。

最佳答案

显然这根本不起作用,因为我正在使用自定义身份验证:

.formLogin()
.failureHandler(authenticationFailureHandler())

相反,我必须在 UsernamePasswordAuthenticationFilter 的构造函数中设置 AuthenticationFailureHandler,如下所示:

public class JWTAuthenticationFilter extends UsernamePasswordAuthenticationFilter {
private AuthenticationManager authenticationManager;

public JWTAuthenticationFilter(AuthenticationManager authenticationManager) {
this.authenticationManager = authenticationManager;
this.setAuthenticationFailureHandler(new RestAuthenticationFailureHandler());
}
}

我希望我自己的答案可以帮助别人。

关于java - 使用自定义身份验证处理 Spring 5 中的 AuthenticationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51711317/

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