WebSecurityConfigurationのデフォルトの動作をオーバーライドしようとしています。定義されたプロパティに基づいてBeanを開始するための独自の条件を作成する必要がありました。 私はカスタム条件クラス内にargコンストラクタを定義していません。それにかかわらず、私はjava.lang.NoSuchMethodException
を取得すると、私はアプリをスピンアップします。カスタムのSpring条件により、java.lang.NoSuchMethodExceptionが発生します。<init>()例外
これは私のコードがどのように見えるかです:
@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()
私が間違って何をしているのですか?
メッセージに行番号が含まれていますか?また、クラスの可視性が "public"ではなく "package-private"であるように見えます。これは、パッケージ外のクラスがクラスにアクセスできなくなる可能性があります。 – Pytry
内部クラスをpublicに変更しても修正されませんでした。しかし、 'DefaultSecurityCondition'を内部クラスではなく別のクラスとして作成すると、意図したとおりに正常に動作します。 –