在使用@Order时不能调用WebSecurityConfigurerAdapter的构造函数 &g



我有一个库,其中包含用于实现web安全的类QuerySecurityConfig extends WebSecurityConfigurerAdapter。这个安全配置类的简化版本如下:

@Configuration
@EnableWebSecurity
@Order(101)
public class QuerySecurityConfig extends WebSecurityConfigurerAdapter {
public QuerySecurityConfig(){
...
this(Arrays.asList("/v2/api-docs");
}

public QuerySecurityConfig(List<String> ignoredRestEndPoints){
...
this.ignoredRestEndPoints = ignoredRestEndPoints;
}
public QuerySecurityConfig(List<String> ignoredRestEndPoints) {
this();
this.ignoredRestEndPoints.addAll(ignoredRestEndPoints);
}
@Override
public void configure(WebSecurity web){
web.ignoring().antMatchers(this.ignoredRestEndpoints.toArray(new String[0]));
}
}

现在,我正在尝试使用如下构造函数之一实例化这个安全类的Bean

@Bean
@Order(200)
public QuerySecurityConfig getQuerySecurityConfig() {
List<String> excludedEndpoints = new ArrayList<>();
excludedEndpoints.add("/seller/**");
return new QuerySecurityConfig(excludedEndpoints);
}

但是,我一直遇到以下错误:

Caused by: java.lang.IllegalStateException: @Order on WebSecurityConfigurers must be unique. Order of 101 was already used on com.example.app.security.QuerySecurityConfig$$
EnhancerBySpringCGLIB$$ca9e6a6c@4981b83, so it cannot be used on com.example.app.security.QuerySecurityConfig@2e549515 too.

@Order存在时,我如何在这样的类上调用构造函数?

似乎我正在尝试创建QuerySecurityConfig类的两个bean。第一个bean是由于QuerySecurityConfig上的@Configuration注释而创建的,第二个bean是由getQuerySecurityConfig()方法手动创建的,由@Bean注释。这导致了Order的重复,因此出现了异常。

我设法通过简单地从组件扫描中排除QuerySecurityConfig来解决这个问题。在此之后,我还必须将@EnableWebSecurity添加到我的配置类中,因为它与QuerySecurityConfig类的其余部分一起被忽略了。

相关内容

  • 没有找到相关文章

最新更新