配置认证过滤器
大约 1 分钟Spring全家桶SpringSecurity认证授权
配置认证过滤器在UsernamePasswordAuthenticationFilter之前。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
// 关闭csrf
http.csrf().disable()
// 不通过session获取SecurityContext
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
// 对于登录接口,允许匿名访问
.antMatchers("/user/login").anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
// 配置认证过滤器在UsernamePasswordAuthenticationFilter之前
http.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
}
}
测试
首先删除redis中的数据,确保没有登录。访问test接口。
不带请求头

禁止访问。
带请求头。这里定义的是Authorization。

没有返回值,后台抛出异常:

在认证过滤器中我们定义了这个异常,当在redis中找不到用户信息的时候,就会抛出。因为此时redis中没有任何信息,所以抛出了异常。
正常登录

然后用返回的token当做请求头,访问/test接口:

访问成功。
测试过程中可以发现,不带请求头或者请求头不正确,都不能正常访问接口。