我有一个库,其中包含用于实现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
类的其余部分一起被忽略了。