最近我被要求创建一个新的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)激活了故障转移认证,我正在阻止将用户信息保存在缓存中。
谢谢!