How to use Spring Ldap Authentication

前端 未结 2 1461
栀梦
栀梦 2021-01-06 10:18

In my current project, I have to implement LDAP authentication. I am using JSF 2.2, primefaces and Spring 4.0 and spring-ldap-core 1.3.2 and spring-security-ldap-3.2.0. Bel

相关标签:
2条回答
  • 2021-01-06 10:37

    I found these article helpful for setting up login form with spring security, however, they do not use jsf:

    http://www.mkyong.com/spring-security/spring-security-hello-world-example/ http://www.mkyong.com/spring-security/spring-security-form-login-example/

    and found this article helpful for using ldap as authentication provider, it does not use ldapTemplate, but uses the spring-security configurations (spring-security.xml in the article)

    http://krams915.blogspot.com/2011/01/spring-security-mvc-using-ldap.html

    0 讨论(0)
  • 2021-01-06 10:49

    This is how I am using LDAP for authentication:

    1. Import Maven dependencies

      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
      </dependency>
      <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-ldap</artifactId>
        <version>4.0.2.RELEASE</version>
      </dependency>
      
    2. Write your implementation of WebSecurityConfigurerAdapter:

      @Configuration
      @EnableWebSecurity
      public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
      
      private static final String SSO_HEADER = "AUTH_USER";
      
      public static final String ADMIN = "ROLE_ADMIN";
      public static final String USER = "ROLE_USER";
      public static final String ANONYMOUS = "ROLE_ANONYMOUS";
      
      @Autowired
      Environment env;
      
      @Override
      protected void configure(HttpSecurity http) throws Exception {
      
          http.authorizeRequests()
                  .antMatchers("/css/**","/js/**","/images/**","/fonts/**","/api/**","/sendRedirect/**","/test/**").permitAll()
                  .anyRequest().fullyAuthenticated().and().formLogin().loginPage("/login")
                  .failureUrl("/login?error").permitAll()
                  .and()
                  .logout()
                  .deleteCookies("remove")
                  .invalidateHttpSession(true)
                  .logoutUrl("/logout")
                  .logoutSuccessUrl("/login?logout")
                  .and()
              // Cross-site request forgery is turned off for RESTful API calls with the assumption that
              // authentication will be sufficient protection
              .csrf().ignoringAntMatchers("/api/**", "/space/{\\d+}/**", "/admin/**");
      }
      
      @Override
      public AuthenticationManager authenticationManagerBean()
          throws Exception
      {
          return authenticationManager();
      }
      
      @Configuration
      protected static class AuthenticationConfiguration extends
              GlobalAuthenticationConfigurerAdapter {
      
          @Autowired
          Environment env;
      
          @Override
          public void init(AuthenticationManagerBuilder auth) throws Exception {
              auth.ldapAuthentication().userDnPatterns("cn={0}")
                      .contextSource(contextSource());
          }
      
          @Bean
          public LdapContextSource contextSource() {
              LdapContextSource contextSource = new LdapContextSource();
              contextSource.setUrl(env.getRequiredProperty("ldap.url"));
              contextSource.setBase(env.getRequiredProperty("ldap.base"));
              contextSource.setUserDn(env.getRequiredProperty("ldap.username"));
              contextSource.setPassword(env.getRequiredProperty("ldap.password"));
              return contextSource;
          }
      }
      
      }
      
    0 讨论(0)
提交回复
热议问题