我们在应用程序中使用带有Spring安全性的Spring启动。 使用Spring db身份验证进行Web身份验证并计划使用ldap进行JMS身份验证。
@Configuration
@EnableWebMvcSecurity
@ComponentScan
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
@SuppressWarnings("PMD")
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http.authorizeRequests()
.antMatchers("/login", "/logoffUser", "/sessionExpired", "/error", "/unauth").permitAll()
.anyRequest().authenticated().and().rememberMe().and().httpBasic()
.authenticationEntryPoint(entryPointObj).and()
.addFilterAfter(filterObj, PreAuthenticatedProcessingFilter.class).csrf()
.disable().logout().deleteCookies("JSESSIONID").logoutSuccessUrl("/logoff").invalidateHttpSession(true);
}
}
网络身份验证无任何问题。
对于LDAP身份验证,我们使用以下代码。
@Configuration
public class LdapAuthenticationConfig extends
GlobalAuthenticationConfigurerAdapter {
/** The environment. */
private Environment environment;
@Override
public void init(AuthenticationManagerBuilder auth) throws Exception {
auth.ldapAuthentication()
.userSearchFilter(
"(&(sAMAccountName={0})(objectclass=organizationalPerson))")
.userSearchBase("OU=${ldap.user-search-base.name}")
.groupSearchFilter("(member={0})")
.groupSearchBase("OU=Global-Groups")
.groupRoleAttribute("un")
.contextSource()
.url(environment.getProperty("ldap.url"))
.managerDn(environment.getProperty("ldap.conn.user"))
.managerPassword(environment.getProperty("ldap.conn.pwd"));
// authenticationManager = auth.getObject();
}
@Autowired
public void setEnvironment(Environment environment) {
this.environment = environment;
}
}
我不确定如何为ldap公开AuthnticationManager,以便它可以在其他类中注入,如下所示。
Public class JmsConfig {
@Autowired
@Qualifier("ldapAuthManager")
private AuthenticationManager authenticationManager;
}
答案 0 :(得分:0)
不确定这是否有很多帮助,但您可以声明
@Autowired List<AuthenticationManager> managers;
并尝试挑选出你想要的经理。
答案 1 :(得分:0)
要获取AuthenticationManager,您可以通过类 WebSecurityConfigurerAdapter 的 authenticationManagerBean 方法显式地公开它。
示例:
@Bean(name name="myAuthenticationManager")
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
另见这篇文章: How To Inject AuthenticationManager using Java Configuration in a Custom Filter