gpt4 book ai didi

java - UsernameNotFoundException 在 spring boot 中抛出 403

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:17 25 4
gpt4 key购买 nike

我有一个 spring boot 项目。当使用不正确的用户凭据发出请求时:

catch (RuntimeException ex) {
log.error("Error occurred while fetching user {}: {}", securityPrincipal, ex);
throw new UsernameNotFoundException("Could not find user: " + securityPrincipal);
}

但最终抛出的异常是 500。

通过一些链接后我发现:

 protected AbstractPreAuthenticatedProcessingFilter multiPreAuthenticatedProcessingFilter() throws Exception {

MultiPreAuthenticatedProcessingFilter filter = new MultiPreAuthenticatedProcessingFilter();

filter.setAuthenticationManager(authenticationManager());
filter.setPreAuthenticatedPrincipalProviders(preAuthenticatedPrincipalProviders);
filter.setCheckForPrincipalChanges(true);
filter.setInvalidateSessionOnPrincipalChange(true);
filter.setContinueFilterChainOnUnsuccessfulAuthentication(**true**);

return filter;
}

将 continueFilterChainOnUnsuccesfulAuthentication 更改为 true 将有助于按原样抛出身份验证异常。但是在将其更改为 true 之后,UsernameNotFoundException 将作为 403 而不是 401 抛出。

是否缺少一些基本的安全配置?

最佳答案

根据 HTTP 规范,提供 403 而不是 401 是绝对正确的,因为提供的凭据是不正确的。返回 401 表示用户应指定访问凭据。

参见:

更新

实际上这不是 100% 清楚的原因 RFC 7235表示如果提供的凭据不正确,可能会返回 401。

关于java - UsernameNotFoundException 在 spring boot 中抛出 403,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36159571/

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