【问题标题】:spring security java config - exposing authentication managerspring security java config - 暴露身份验证管理器
【发布时间】:2015-08-18 23:06:53
【问题描述】:

我们在应用程序中使用带有 Spring 安全性的 Spring Boot。 使用 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;
}

【问题讨论】:

    标签: spring spring-security spring-ldap


    【解决方案1】:

    不确定这是否有很大帮助,但您可以声明一个

     @Autowired List<AuthenticationManager> managers; 
    

    并尝试挑选您想要的经理。

    【讨论】:

    • 这仅返回 WebSecurityConfig 类中配置的 AuthenticationManager,它没有 LDapAuthenticationManager。
    【解决方案2】:

    要获得 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      • 1970-01-01
      • 2015-02-14
      相关资源
      最近更新 更多