我有一个弹簧配置文件“DEV”,这是我唯一的配置文件,我不想创建“生产”配置文件。所以只有当配置文件是“DEV”时,我想为弹簧安全启动一个特定类型的bean(这是一个内存访客用户和一个userdetails bean)弹簧配置文件默认行为
但是,如果在我的tomcat启动时没有提供弹簧配置文件,这是生产中的情况,我希望我的应用程序继续它已经在做的事情(使用ldap authenticatin提供程序)。
有没有一种方法来定义一个“默认”的bean行为,而不需要在启动时提供配置文件?或者你可以看看我的代码,并建议一个不同的解决方案。
@Autowired
public void configureGlobal(final AuthenticationManagerBuilder auth, final AuthenticationProvider provider) throws Exception {
auth
.eraseCredentials(false)
.authenticationProvider(provider)
.authenticationProvider(jwtConfig.jwtAuthenticationProvider());
}
@Bean
public UserDetailsService userDetailsService() {
final LdapUserDetailsService ldapUserDetailsService = new LdapUserDetailsService(ldapUserSearch(), ldapAuthoritiesPopulator());
return new CompositeUserDetailsService(Arrays.asList(technicalUserDetailsService(), ldapUserDetailsService));
}
@Bean
@Profile("DEV")
public UserDetailsService devUserDetailsService() {
useAnonymous = true;
InMemoryUserDetailsManagerBuilder b = new InMemoryUserDetailsManagerBuilder()
.withUser("user").password("password").authorities(ROLE_USER, ROLE_ADMIN).and();
return new CompositeUserDetailsService(Arrays.asList(b.build(),
technicalUserDetailsService()));
}
@Bean
public AuthenticationProvider ldapAuthenticationProvider() {
final BindAuthenticator ba = new BindAuthenticator((BaseLdapPathContextSource) contextSource());
ba.setUserSearch(ldapUserSearch());
return new LdapAuthenticationProvider(ba, ldapAuthoritiesPopulator());
}
你已经试过了吗?如果是这样,是否出现了问题? – john16384
通过定义bean并在配置文件处于活动状态时覆盖它...W这基本上是默认行为。 –