2016-05-16 6 views
0

私が定義したプロパティに応じて、基本認証またはOauth2を必要とする春の起動アプリケーションを作成しています。コンフィグレーションを動的にロードする

@configurationで2つのクラスを作成した場合、アプリケーションが起動せず、そのまま残してconfigureメソッドでHttpSecurityオブジェクトを設定するifを追加すると問題が発生します。基本認証を持つエンドポイント

私は動的にこのように豆を登録しよう:

@Bean 
public ResourceServerSecurityConfig oauthConfig(){ 
    if(isOauthEnabled){ 
     return new ResourceServerSecurityConfig(); 
    }else{ 
     return null; 
    } 
} 
@Bean 
public BasicSecurityConfig basicConfig(){ 
    if(isOauthEnabled){ 
     return new BasicSecurityConfig(); 
    }else{ 
     return null; 
    } 
} 

しかし、構成がロードされません。 これをアーカイブする方法に関するヒント?

答えて

1

条件ビーン作成が必要です。 @Conditionalを試してみてください。

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/Conditional.html

あなたは、システムのプロパティに基づいてカスタム条件を作成することができます。

また、もしが、その読みにくくでそれを行うことができ、あなたの設定をクラスタ化が、短い例えば、このしようとします。しかしこれは汚いハックです

@Bean 
public SecurityConfig basicConfig(@Value("${authentication.type.oauth}" boolean isOauthEnabled)){ 
    if(isOauthEnabled){ 
     return new ResourceServerSecurityConfig(); 
    }else{ 
     return new BasicSecurityConfig(); 
    } 
} 

を。

+0

「@コンディション」の仕事!まあ...。値に応じてBeanをロードします。私が今行っている問題は、Conditionインターフェイスを実装するクラスを作成したが、そのクラスがプロパティファイルから "@Value"をロードしていないことです。私は "@値"のためにクラスがBeanでなければならないので、クラスに "@Component"を注釈付けしようとしましたが、値がロードされていない理由を見つけることができません。とにかく、元の問題を解決したので、あなたの答えを正しいものとしてマークしました。ありがとう! – aruiz

+1

最後の問題の解を探します。 matchesメソッドのConditionContextを使用して、ファイルからプロパティを読み取ることができました。なぜなら、[リンク](http://stackoverflow.com/questions/25276463/how-get-working-value-or-environment-in-a-class-implementing-the-condition-conf)は、 "Spring takesあなたが指定したClass型を使用して、それをインスタンス化してmatchesメソッドを使用します。インスタンスをBeanとみなさず、オートワイヤリングも@Value処理も行いません。後者はBeanFactoryPostProcessorでも同様です" – aruiz

0

Springブートアプリケーションで注釈@SpringBootApplicationを定義しましたか?

下のサンプルをご覧ください。また、あなたは、メインアプリケーションに@Import({ApplicationConfig.class})に注釈を付けることができます

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     ....... 
     } 
    } 

} 

+0

はい、@SpringBootApplicationアノテーションをメインアプリケーションに追加しました。 – aruiz

+0

@ Import({ApplicationConfig.class})をメインアプリケーションに注釈を付けることもできます。つまり、クラス名はconfigクラス – shankarsh15

+0

ですが、プロパティ値に応じて設定をロードする必要があります。 – aruiz

関連する問題