我只是想覆盖 WebSecurityConfiguration 的默认行为,并且必须编写自己的条件来根据定义的属性启动 bean。
我在自定义条件类中没有定义 arg 构造函数。不管怎样,当我启动应用程序时,我会收到 java.lang.NoSuchMethodException
。
这就是我的代码的样子:
@Configuration
@ConditionalOnClass(WebSecurityConfigurerAdapter.class)
@Slf4j
public class WebSecurityConfiguration {
class DefaultSecurityCondition implements Condition {
public DefaultSecurityCondition(){}
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
if (context.getEnvironment().getProperty("property.server.authorised-clients") == null &&
context.getEnvironment().getProperty("property.server.authorised-thumbprints") == null) {
return true;
}
return false;
}
}
@Configuration
@Conditional(DefaultSecurityCondition.class)
@EnableWebSecurity
public class DefaultAuthorisationConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/").permitAll()
.and().httpBasic().disable().authorizeRequests()
.and().csrf().disable();
}
}
}
但是,当我尝试启动我的应用程序时,出现以下异常。
java.lang.NoSuchMethodException: com.test.WebSecurityConfiguration$DefaultSecurityCondition.()
我做错了什么?
最佳答案
当它是内部类时,DefaultSecurityCondition
必须声明为static
。当它不是静态
时,如果没有其外部类的实例,则无法创建实例。
关于spring - 自定义 Spring 条件导致 java.lang.NoSuchMethodException : <init>() exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47167759/