配置认证过滤器

HeJin大约 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接口:

访问成功。

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