spring security (originalChain和additionalFilters)

Spring Security过滤器其实分成2部分:originalChain 和 additionalFilters 

顺序就是先走我们定义的过滤器(additionalFilters),然后再走内部过滤器(originalChain)

spring security (originalChain和additionalFilters)_第1张图片

 代码实例:我们配置在httpSecurity的都是在additionalFilters里,在WebSecurity里配的在originalChain里

    @Override
    protected void configure(HttpSecurity http) throws Exception {  
http.addFilterBefore(validateCodeFilter, UsernamePasswordAuthenticationFilter.class);

                http.formLogin() // 表单登录
                // 登录的界面,前后端分离时不需要这个配置。没登录去访问系统资源时会重定向到这个界面
                .loginPage("/login/home")
                // 登录验证,框架自动实现
                .loginProcessingUrl("/login/verify")
                //  如果直接访问的是登录界面login1,返回的URL,否则会返回重定向到原本请求的URL
                .successHandler(myAuthenticationSuccessHandler)
                //  失败返回的URL
                .failureHandler(myAuthenticationFailureHandler)


                .and().authorizeRequests() // 授权配置
                .antMatchers("/login/**","/code/image","/favicon.ico").permitAll()
                .anyRequest().authenticated()  // 其它所有请求都需要认证

                .and().csrf().disable()

                .headers().defaultsDisabled().cacheControl()

        ;

        http.logout().disable();
        http.addFilterAt(getLogoutFilter(), LogoutFilter.class);
}

@Override
public void configure(WebSecurity web) throws Exception {
    // 设置忽略认证/授权 的请求,一般放一些静态文件等
    web.ignoring().antMatchers(ignoreUrl.split(","));
    // 设置自定义的权限校验过滤器
    web.securityInterceptor( new ResourceFilterSecurityInterceptor());
}

 

FilterChainProxy里的VirtualFilterChain类展示了过滤器的顺序:

spring security (originalChain和additionalFilters)_第2张图片

 

 

 

 

 

 

 

 

你可能感兴趣的:(spring,security)