当前位置: 首页 > 知识库问答 >
问题:

防止Spring Boot注册Spring Security过滤器之一

吴星汉
2023-03-14

我想禁用安全链中的一个Spring Security过滤器。

我已经看到了阻止Spring Boot注册servlet筛选器的问题--接受应该有效,但不幸的是不行。

使用代码:

    @Bean
    public FilterRegistrationBean registration(AnonymousAuthenticationFilter filter) {
        FilterRegistrationBean registration = new FilterRegistrationBean(filter);
        registration.setEnabled(false);
        return registration;
    }

春靴会及时宣布没有排位豆,可悲:

原因:org.springframework.beans.factory.NosuchBeanDefinitionException:找不到依赖项得[org.springframework.security.web.authentication.anonymousauthenticationfilter]类型得合格bean:需要至少一个符合此依赖项自动候选条件得bean.依赖项批注:{}

创建另一个bean后:

    @SuppressWarnings("deprecation") // Oh, there be dragons
    @Bean
    public AnonymousAuthenticationFilter anonymousAuthenticationFilter() {
        return new AnonymousAuthenticationFilter();
    }

我被攻击了

原因:java.lang.IllegalArgumentException:[Assertion failed]-此字符串参数必须有长度;不能为空或为空

这是完全不稳定的;afterPropertiesSet()方法https://github.com/spring-projects/spring-security/blob/master/web/src/main/java/org/springframework/security/web/authentication/anonymousauthenticationfilter.java中的assert阻止了我使用默认构造函数。使用另一种方法:

    @Bean
    public AnonymousAuthenticationFilter anonymousAuthenticationFilter() {
        // it will be disabled anyway so...
        return new AnonymousAuthenticationFilter("_", new Object(), new ArrayList<GrantedAuthority>());
    }

一切都好得多:

信息4916---[ost-startStop-1]O.S.B.C.Embedded.FilterRegistrationBean:未注册筛选器anonymousAuthenticationFilter(已禁用)

调试4916---[ost-startStop-1]o.security.web.FilterChainProxy:正在初始化筛选器“Spring SecurityFilterChain”

调试4916---[ost-startStop-1]o.security.web.FilterChainProxy:筛选器“Spring SecurityFilterChain”配置成功

但在访问了一些资源后,我得到了:

调试4916---[nio-8080-exec-3]O.Security.web.filterChainProxy:/user位于附加筛选器链中13个位置的第10个位置;正在激发筛选器:“AnonymousAuthenticationFilter”

调试4916---[nio-8080-exec-3]O.S.S.W.A.AnonymousAuthenticationFilter:使用匿名令牌填充SecurityContextHolder:'org.springframework.security.Authentication.AnonymousAuthenticationToken@90572420:principal:AnonymousUser;全权证书:[受保护];已认证:真实;详细信息:org.springframework.security.web.authentication.webauthenticationdetails@255f8:RemoteIpAddress:127.0.0.1;SessionID:6B9D974A4634548750FE78C18F62A6B0;授予的权限:role_anonymous'

由于某种原因,AnonymousAuthenticationFilter仍在工作。问题是:在Spring Boot应用程序中有没有一种方法可以禁用这样的过滤器?

共有1个答案

于飞飙
2023-03-14

Spring Security捆绑了HttpSecurity配置中的所有过滤器。要禁用匿名身份验证,请使用以下操作:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .anonymous().disable()
            ...
    }
    ...
}

如果希望禁用Spring Security中的所有默认值,可以将true传递到父类构造函数中以禁用默认值。例如:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    public SecurityConfig() {
        super(true);
    }
    ...
}
 类似资料:
  • 问题内容: 有一个Spring Boot WebMVC应用程序,还有一个从AbstractPreAuthenticatedProcessingFilter继承的bean,我将其显式添加到Spring Security过滤器链中的特定位置。我的Spring Security配置如下所示: 安全配置有效。问题是,因为PreAuthenticationFilter类继承自AbstractPreAuthe

  • void register_prefilter(mixed function) Use this to dynamically register prefilters to run templates through before they are compiled. See template prefilters for more information on how to setup a pr

  • void register_postfilter(mixed function) Use this to dynamically register postfilters to run templates through after they are compiled. See template postfilters for more information on how to setup a

  • void register_outputfilter(mixed function) Use this to dynamically register outputfilters to operate on a template's output before it is displayed. See template output filters for more information on

  • 本文向大家介绍php防止sql注入之过滤分页参数实例,包括了php防止sql注入之过滤分页参数实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php防止sql注入中过滤分页参数的方法。分享给大家供大家参考。具体分析如下: 就网络安全而言,在网络上不要相信任何输入信息,对于任何输入信息我们都必须进行参数过滤。对此,我们先来看看下面的实例: 其中: 这两句判断了参数是否为数字。防止非法字符

  • 我不明白两者之间有什么区别,为什么我要用一个而不是另一个?