需求背景比较简单,就是需要区分以下两种状态:
Basic Auth 认证的场景 | 返回状态码 |
---|---|
没有用户名密码 | 401 |
用户名密码错误 | 403 |
实现也比较粗暴,通过 Spring Security 的 WebSecurityConfigurerAdapter,配置自定义的 AuthenticationEntryPoint,然后判断异常的类型设置不同的状态,密码错误时的异常为BadCredentialsException,没有用户密码时的异常为InsufficientAuthenticationException,代码如下:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
// omit other configures ......
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests().anyRequest().authenticated()
.and().httpBasic().authenticationEntryPoint(authenticationEntryPoint());
}