Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止Spring Boot注册其中一个Spring安全筛选器_Java_Spring_Spring Security_Spring Boot - Fatal编程技术网

Java 防止Spring Boot注册其中一个Spring安全筛选器

Java 防止Spring Boot注册其中一个Spring安全筛选器,java,spring,spring-security,spring-boot,Java,Spring,Spring Security,Spring Boot,我想禁用安全链中的一个Spring安全过滤器 我已经看到了这个问题,并接受了应该有效,但不幸的是,事实并非如此 代码为: @Bean public FilterRegistrationBean registration(AnonymousAuthenticationFilter filter) { FilterRegistrationBean registration = new FilterRegistrationBean(filter); re

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

我已经看到了这个问题,并接受了应该有效,但不幸的是,事实并非如此

代码为:

    @Bean
    public FilterRegistrationBean registration(AnonymousAuthenticationFilter filter) {
        FilterRegistrationBean registration = new FilterRegistrationBean(filter);
        registration.setEnabled(false);
        return registration;
    }
Spring Boot将立即宣布没有符合条件的bean,这很遗憾:

原因:org.springframework.beans.factory.NoSuchBean定义异常:未找到依赖项类型为[org.springframework.security.web.authentication.AnonymousAuthenticationFilter]的符合条件的bean:应至少有1个符合此依赖项autowire候选项条件的bean。依赖项批注:{}

创建另一个bean后:

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

原因:java.lang.IllegalArgumentException:[断言失败]-此字符串参数必须具有长度;它不能为null或空

这是完全可以理解的<
afterPropertieSet()
方法中的code>Asserts阻止我使用默认构造函数。使用另一种方法:

    @Bean
    public AnonymousAuthenticationFilter anonymousAuthenticationFilter() {
        // it will be disabled anyway so...
        return new AnonymousAuthenticationFilter("_", new Object(), new ArrayList<GrantedAuthority>());
    }
@Bean
public AnonymousAuthenticationFilter AnonymousAuthenticationFilter(){
//它将被禁用,所以。。。
返回新的AnonymousAuthenticationFilter(“,”新对象(),新ArrayList());
}
一切都好得多:

信息4916---[ost-startStop-1]o.s.b.c.embedded.FilterRegistrationBean:筛选器匿名身份验证筛选器未注册(已禁用)

调试4916---[ost-startStop-1]o.s.security.web.FilterChainProxy:初始化筛选器“springSecurityFilterChain”

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

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

调试4916---[nio-8080-exec-3]o.s.security.web.FilterChainProxy:/user,位于附加过滤器链13的第10位;正在启动筛选器:“匿名身份验证筛选器”

调试4916---[nio-8080-exec-3]o.s.s.w.a.AnonymousAuthenticationFilter:使用匿名令牌填充SecurityContextHolder:'org.springframework.security.authentication'。AnonymousAuthenticationToken@90572420:委托人:匿名用户;凭据:[受保护];认证:正确;详细信息:org.springframework.security.web.authentication。WebAuthenticationDetails@255f8:RemoteIP地址:127.0.0.1;会话ID:6B9D974A4634548750FE78C18F62A6B0;授予的权限:角色\u匿名'

由于某些原因,AnonymousAuthenticationFilter仍在工作。
问题:有没有办法在Spring引导应用程序中禁用此类过滤器?

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

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .anonymous().disable()
            ...
    }
    ...
}
如果要禁用Spring安全性中的所有默认值,可以将true传递给父类构造函数以禁用默认值。例如:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    public SecurityConfig() {
        super(true);
    }
    ...
}

非常感谢。我不敢相信我花了这么多时间在互联网、文档和源代码中搜索,而解决方案总是如此接近。你是我的英雄。我不得不说,春天总是这样。我完全同意上面的评论,我也有KeyClope,四处搜索,看看这个“匿名用户”是从哪里来的。。。