現在のプロジェクトでは、LDAP認証を実装する必要があります。 JSF 2.2、primefaces、Spring 4.0、spring-ldap-core 1.3.2、spring-security-ldap-3.2.0を使用しています。以下は、私がこれまでに達成した作業です。
Spring-Ldap.xml
<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
<property name="url" value="ldap://mumcXXXXXXX" />
<property name="base" value="dc=ad,dc=XXX,dc=com"/>
<property name="userDn" value="[email protected]" />
<property name="password" value="XXXX" />
</bean>
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate">
<constructor-arg ref="contextSource" />
</bean>
<bean id="ldapContact"
class="com.csap.research.LDAPContactDAO">
<property name="ldapTemplate" ref="ldapTemplate" />
</bean>
私のLdapContactDao
public boolean login(String username, String password) {
AndFilter filter = new AndFilter();
ldapTemplate.setIgnorePartialResultException(true);
filter.and(new EqualsFilter("userPrincipalName", username+"@ad.cXXX.com"));
return ldapTemplate.authenticate("", filter.toString(), password);
}
ここで、ユーザー名とパスワードはログイン画面から入力として取得されます。私の問題は、その非常にハードコーディングされていることです。 Spring-Ldap.xmlにusernameとpasswordをハードコーディングしたくない、したがって、ここでSpring-security-Ldapを使用するという提案がありました Spring LdapAuthenticationおよびローカルデータベースからのロールのロード しかし、私はそれを理解できませんでした。
私の質問は、フロントエンドコントローラーとして使用しているスプリングおよびコルスJSFとLdapの動的統合をどのように実現できるかということでした。どんな助けでも素晴らしいでしょう。
これらの記事は、Spring Securityを使用してログインフォームを設定するのに役立ちましたが、jsfを使用していません。
http://www.mkyong.com/spring-security/spring-security-hello-world-example/http://www.mkyong.com/spring-security/spring -security-form-login-example /
この記事は、ldapを認証プロバイダーとして使用するのに役立ちます。ldapTemplateは使用しませんが、spring-security構成(記事のspring-security.xml)を使用します。
http://krams915.blogspot.com/2011/01/spring-security-mvc-using-ldap.html
これは、認証にLDAPを使用する方法です。
Mavenの依存関係をインポートする
<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>
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;
}
}
}