我只是试图覆盖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。()
我做错了什么?
答案 0 :(得分:1)
当它是内部类时,DefaultSecurityCondition
必须声明为static
。当它不是static
时,如果没有其外部类的实例,则无法创建实例。