在 SpringBoot 中的 SpringSecurity 的配置类中,http.permitAll() 与 web.ignoring() 的区别?

虽然这两个都是继承 WebSecurityConfigurerAdapter 后重写的方法,但是 http.permitAll 不会绕开 springsecurity 的过滤器验证,相当于只是允许该路径通过过滤器,而 web.ignoring 是直接绕开 spring security 的所有 filter,直接跳过验证。

permitAll 配置实例

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .antMatchers("/css/**", "/js/**","/fonts/**").permitAll()
                .anyRequest().authenticated();
    }
}
 

web ignore 配置实例

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/css/**");
        web.ignoring().antMatchers("/js/**");
        web.ignoring().antMatchers("/fonts/**");
    }
}
 

二者区别

顾名思义,WebSecurity 主要是配置跟 web 资源相关的,比如 css、js、images 等等,但是这个还不是本质的区别,关键的区别如下:

  • ignore 是完全绕过了 spring security 的所有 filter,相当于不走 spring security,所以 ignore 只适合配置静态资源的过滤,不适合 api 的过滤,过滤 api 就调用不了 api 了
  • permitall 没有绕过 spring security,其中包含了登录的以及匿名的。