java - spring security:BadCredendtials 异常未由链处理且未返回 401
问题描述
早上好,
我正在关注本教程,以使 spring security 与 jwt 令牌一起工作。
*我的环境版本* spring boot:2.0.1 RELEASE
春季安全配置
@Override
protected void configure(final HttpSecurity http) throws Exception {
http
.cors().configurationSource(request -> getCorsConfiguration())
.and()
.sessionManagement()
.sessionCreationPolicy(STATELESS)
.and()
.exceptionHandling()
.defaultAuthenticationEntryPointFor(forbiddenEntryPoint(), PROTECTED_URLS)
.and()
.authenticationProvider(provider)
.addFilterBefore(restAuthenticationFilter(), AnonymousAuthenticationFilter.class)
.authorizeRequests()
.requestMatchers(PROTECTED_URLS)
.authenticated()
.and()
.csrf().disable()
.formLogin().disable()
.httpBasic().disable()
.logout().disable();
}
@Bean
TokenAuthenticationFilter restAuthenticationFilter() throws Exception {
final TokenAuthenticationFilter filter = new TokenAuthenticationFilter(PROTECTED_URLS);
filter.setAuthenticationManager(authenticationManager());
filter.setAuthenticationSuccessHandler(successHandler());
return filter;
}
@Bean
SimpleUrlAuthenticationSuccessHandler successHandler() {
final SimpleUrlAuthenticationSuccessHandler successHandler = new SimpleUrlAuthenticationSuccessHandler();
successHandler.setRedirectStrategy((HttpServletRequest request, HttpServletResponse response, String url) -> {
// no redirection strategy
});
return successHandler;
}
/**
* Disable Spring boot automatic filter registration.
*/
@Bean
FilterRegistrationBean disableAutoRegistration(final TokenAuthenticationFilter filter) {
final FilterRegistrationBean registration = new FilterRegistrationBean(filter);
registration.setEnabled(false);
return registration;
}
@Bean
AuthenticationEntryPoint forbiddenEntryPoint() {
return new HttpStatusEntryPoint(FORBIDDEN);
}
语境:
令牌认证过滤器抛出 BadCredentialsException,以防令牌不符合预期。
预期行为:
spring 链将捕获此错误并将 401 错误返回给用户。
当前行为:
服务器因 500 错误而崩溃。spring security 不处理该错误。
解决方案
推荐阅读
- linux - 使用 O_CREAT 的 mq_open() 失败,而使用 O_CREAT 的 open() 成功
- excel - 我的 Outlook 签名 Outlook 与 VBA 的问题
- c++ - 使用流处理接收到的数据
- javascript - 将行放入数组 sqlite3 nodejs 有什么问题
- r - 从数据表的两列中删除对重复项
- azure - 无法在 Azure 中注册的应用程序下将身份验证更新为多租户
- python - 单击并操作数据后刷新文本以绘图方式破折号
- excel - Excel If and else statement
- php - 登录时的替代页面标题和元数据
- sql - SQL Server:返回一天中最近时间的坐标