在我的Spring Boot(v.2.7.0)应用程序中,我使用Spring Security进行身份验证。如果用户尝试使用无效凭据登录,服务器会以403(禁止)状态代码响应,但我希望使用401(未授权)。
我在配置中找不到任何指示Spring Security性的默认行为已被覆盖的内容,但无论是否被覆盖,我都希望在身份验证失败时返回401。
我浏览了相关的Spring Security代码,它显示了Spring Security方法SimpleRuthenticationFailureHandler。当身份验证失败时,调用onAuthenticationFailure。此方法包括行
response.sendError(HttpStatus.UNAUTHORIZED.value(), HttpStatus.UNAUTHORIZED.getReasonPhrase());
但是由于某种原因,403被返回给了客户机-所以我猜响应是在上面这一行之后被更改的。
如何在身份验证失败时将Spring Security更改为返回401?我在下面包含了我的安全配置以供参考。
@EnableWebSecurity
@EnableGlobalMethodSecurity(securedEnabled = true, prePostEnabled = true, jsr250Enabled = true)
public class SecurityConfiguration {
@Autowired
private AuthenticationConfiguration authenticationConfiguration;
@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
AuthenticationManager authenticationManager = authenticationConfiguration.getAuthenticationManager();
var jwtAuthenticationFilter = new JwtAuthenticationFilter(authenticationManager);
var jwtAuthorisationFilter = new JwtAuthorisationFilter();
http.cors().and().csrf().disable().authorizeRequests()
.anyRequest().authenticated().and()
.addFilter(jwtAuthenticationFilter)
.addFilterAfter(jwtAuthorisationFilter, BasicAuthenticationFilter.class)
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS);
return http.build();
}
}
JwtAuthenticationFilter调用authenticationManager。进行身份验证,从而导致组织。springframework。安全身份验证。如果凭据无效,将引发BadCredentialsException。
我尝试添加本文中描述的自定义AuthenticationFailureHandler
bean,但我的自定义bean从未被调用(而是调用默认beanSimpleUrlAuthenticationFailureHandler
)。
您可以提供自己的自定义AccessDeniedHandler
实现。
@Bean
public SecurityFilterChain configure(HttpSecurity http) throws Exception {
AuthenticationManager authenticationManager = authenticationConfiguration.getAuthenticationManager();
var jwtAuthenticationFilter = new JwtAuthenticationFilter(authenticationManager);
var jwtAuthorisationFilter = new JwtAuthorisationFilter();
http.cors().and().csrf().disable().authorizeRequests()
.anyRequest().authenticated().and()
.addFilter(jwtAuthenticationFilter)
.addFilterAfter(jwtAuthorisationFilter, BasicAuthenticationFilter.class)
.sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.exceptionHandling()
.accessDeniedHandler( (request, response, exception) ->
response.sendError(HttpStatus.UNAUTHORIZED.value(), exception.getMessage()
));
return http.build();
}
问题内容: 以下是我从GoLang获得的MongoDB连接拨号。但是它返回一个紧急消息“ SASL身份验证步骤服务器返回错误:身份验证失败。 ”。我的用户名,密码,hostAddrs和dbName是正确的。我在这里想念什么? 问题答案: 我遇到类似的错误并添加了参数,并且在我们连接到远程MongoDB时可以正常工作 在您的代码中使用以下类似格式:
Tweepy API请求twitter return me Twitter错误响应:状态代码=401。 这是我的实际代码: 我曾试图用tweepy软件包删除推文,并获得了所有必需的密钥。镊子包装不起作用吗?有人能帮我解决这个问题吗。
我在我的微服务中使用Spring Security基本身份验证来验证客户端,我向消费者提供了我将返回响应作为响应实体 我扩展了BasicAuthenticationEntryPoint,将自己的身份验证入口点自定义为MyBasicAuthenticationEntryPoint。然后抛出一个异常并尝试从@ExceptionHandler处理。但是,这不起作用。此外,我用@ControllerAdv
问题内容: 尝试使用JavaMail中的NTLM连接到Exchange服务器。我可以连接到SMTP,但不能连接到IMAP。我还可以使用相同的主机/用户名/密码通过OS X Mail.app应用程序进行身份验证,帐户类型=“ IMAP”,端口143,ssl = false,authentication = NTLM,域名=“。 连接代码: 输出: 我尝试通过http://www.oracle.com
我相对来说是JMeter的新手,但是我很难让HTTP Sampler登陆到一个安全的网页上。我认为它需要NTLM认证,所以我使用HTTP授权管理器来传递BlazeMeter指南中指定的凭证 我的授权管理器具有以下值: 基本网址: https:// [测试站点] 用户名: [我的用户名] 密码: [我的密码] 域:与基本网址相同 机制: BASIC_DIGEST 然而,我只是得到一个401错误(见下
问题内容: 我正在用作iPhone客户端的后端API服务器。我正在使用进行身份验证。相关代码如下: 和 现在,我设法将失败的登录重定向到/ loginfail,在那里我将一些JSON发送回iPhone客户端。但是,这没有足够的粒度。我希望能够将适当的错误发送回iPhone客户端,例如:“找不到用户”或“密码错误”。用我现有的代码,我看不到如何实现。 我尝试按照示例进行操作,以完成passport.