2017-11-07 3 views
1

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()

私が間違って何をしているのですか?

+0

メッセージに行番号が含まれていますか?また、クラスの可視性が "public"ではなく "package-private"であるように見えます。これは、パッケージ外のクラスがクラスにアクセスできなくなる可能性があります。 – Pytry

+0

内部クラスをpublicに変更しても修正されませんでした。しかし、 'DefaultSecurityCondition'を内部クラスではなく別のクラスとして作成すると、意図したとおりに正常に動作します。 –

答えて

1

内部クラスの場合、DefaultSecurityConditionstaticと宣言する必要があります。 staticでない場合、インスタンスはその外部クラスのインスタンスも持たずに作成できません。

+0

ありがとうAndy。正常に動作します!!! –

関連する問題