最近我被要求創建一個新的profile
來(去)激活一個功能。我有兩種情況下我必須做出改變:@Profile和@ConditionalOnProperty
class A {
public void configure(AuthenticationManagerBuilder auth) throws Exception {
SecurityConfigurer ldapConfigurer = securityFactory.ldapAuthenticationProviderConfigurer();
ldapConfigurer.configure(auth);
SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer();
offlineConfigurer.configure(auth);
}
}
在上面的類,如果配置文件是活動的,最後兩行沒有被執行。我擴展了課程,並將其指定爲新配置文件@Profile("notOffline")
,並將其放在原始課程@Profile("!notOffline")
中。
class A {
public void configure(AuthenticationManagerBuilder auth) throws Exception {
SecurityConfigurer ldapConfigurer = securityFactory.ldapAuthenticationProviderConfigurer();
ldapConfigurer.configure(auth);
SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer();
offlineConfigurer.configure(auth);
}
}
class B extends A {
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
super();
SecurityConfigurer offlineConfigurer = securityFactory.offlineAuthenticationProviderConfigurer();
offlineConfigurer.configure(auth);
}
}
第二個地方,我不得不重構是這樣的:
class C {
public Something foo() {
code();
code();
code();
thisLineHasNotToBeExecuted();
code();
code();
return something;
}
}
還沒有被執行的行取決於變量,該方法使用的休息,這不是什麼返回。我之前所做的方法並不是這種情況下的快樂方法(並且有兩種方法正在調用此方法,但尚未執行)。
經過一段時間,我意識到一個更好的方法是將屬性添加到最後一個類,該類註釋了@Value
並將參數傳遞給啓動時的tomcat。這樣我可以在thisLineHasNotToBeExecuted()
裏有一個if
,我可以在class A
及其孩子上使用@ConditionalOnProperty
。
我的方法是否正確?
更多信息:當我使用ActiveDirectory和第二個類時,我(de)激活了故障轉移認證,我正在阻止將用戶信息保存在緩存中。
謝謝!