spring-security 在permit的情况下执行Springboot筛选器所有url也是如此

bsxbgnwa  于 2022-11-11  发布在  Spring
关注(0)|答案(1)|浏览(259)

我是新的springboot和试图实现安全的地方没有过滤器应用到我的登录,注册和家庭网址。
我使用的是springboot 2.7.1
我期待antMatchers("/**/signup").permitAll()保持免费的任何安全过滤器。
在调试时,我发现我的注册URL被命中,用户详细信息被保存,但我的AuthorizationFilter也被执行。
这是我的安全筛选器链:

@Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {

        AuthenticationManagerBuilder authenticationManagerBuilder=http.getSharedObject(AuthenticationManagerBuilder.class);
        authenticationManagerBuilder.userDetailsService(userLoginService).passwordEncoder(bCryptPasswordEncoder);
        AuthenticationManager authenticationManager=authenticationManagerBuilder.build();

        http.csrf().disable().authorizeHttpRequests()
                .antMatchers("/**/login").permitAll()
                .antMatchers("/**/signup").permitAll()
                .antMatchers("/home/**").permitAll()
                .anyRequest().authenticated().and()
                .addFilter(getAuthenticationFilter(authenticationManager))
                .addFilter(new AuthorizationFilter(authenticationManager))
                .authenticationManager(authenticationManager)
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        return http.build();
    }

我不明白为什么会这样。

8i9zcol2

8i9zcol21#

当您使用permitAll()时,您并没有停用筛选器,您只是指定您不想对该RequestMatcher套用任何验证/受权检查。所有的筛选器仍会运作。
AuthorizationFilter将被调用,但由于您为该端点配置了permitAll(),因此它将始终授予访问权限。

相关问题