Java 防止Spring Boot注册其中一个Spring安全筛选器
我想禁用安全链中的一个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
@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,四处搜索,看看这个“匿名用户”是从哪里来的。。。