spring security java config - 公开身份验证管理器

时间:2015-08-18 23:06:53

标签: spring spring-security spring-ldap

我们在应用程序中使用带有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;
}

2 个答案:

答案 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