为什么我们需要在Spring Security的configure(HttpSecurity http)方法中调用http.addFilterBefore()方法?

10 浏览
0 Comments

为什么我们需要在Spring Security的configure(HttpSecurity http)方法中调用http.addFilterBefore()方法?

为什么我们通常需要在初始的configure(HttpSecurity http)方法中调用http.addFilterBefore(jwtAuthenticationFilter(),UsernamePasswordAuthenticationFilter.class)方法?我理解它首先添加了jwtAuthenticationFilter()的结果,然后是UsernamePasswordAuthenticationFilter,但我不确定为什么。\njwtAuthenticationFilter()的实现:\n

@Override
protected void configure(AuthenticationManagerBuilder authenticationManagerBuilder) throws Exception {
    authenticationManagerBuilder.userDetailsService(customerService).passwordEncoder(bCryptPasswordEncoder());
}

\n另外,是不是只有在启动时才会调用扩展了WebSecurityConfigurerAdapter的安全类?

0
0 Comments

为什么我们需要在Spring Security的configure(HttpSecurity http)方法中调用http.addFilterBefore()方法?

在简单的话语中,Spring Security是一个基于过滤器的框架。我们要么启用现有的过滤器并对其进行配置,要么添加自定义过滤器。

configure()方法用于设置现有过滤器,设置完成后可以修改这些过滤器的配置。如果您的配置修改不能满足要求,那么可以定义自己的自定义过滤器。

定义自定义过滤器有三种方式:

1. addFilter()方法:您可以添加Spring定义的过滤器实例,或者添加这些Spring Security定义过滤器的子类实例。例如:.addFilter(customAuthFilter, UsernamePasswordAuthenticationFilter.class),customAuthFilter应该是UsernamePasswordAuthenticationFilter的子类实例或者是UsernamePasswordAuthenticationFilter的实例。

2. addFilterAfter()和addFilterBefore()方法:在这里,过滤器可以是任何自定义过滤器,但是自定义过滤器必须是GenericFilterBean的实现。在大多数情况下,使用OncePerRequestFilter的实现。

为什么我们应该在UsernamePasswordAuthenticationFilter之前添加jwt过滤器而不是其他过滤器呢?

我们正在进行配置,而不是调用!addFilterBefore是一个被调用的方法。

0