0

独自の LDAP 認証プロバイダーを作成したいと考えています。AbstractUserDetailsAuthenticationProviderメソッドを持つ を拡張していretrieveUser(String username, UsernamePasswordAuthenticationToken authentication)ます。

このメソッドをオーバーライドして、独自のデータ取得メソッドを作成したいと考えています。Javaでそれを行う方法は?LDAP クエリの作成方法と LDAP サーバーへの接続方法 私はインターネットで検索していましたが、役立つものは何も見つかりませんでした。

編集: 22.01.2013

@Override
protected UserDetails retrieveUser(String username,
        UsernamePasswordAuthenticationToken authentication)
        throws AuthenticationException {

    LdapUser userDetail = null;

    log.entry("retrieveUser", authentication.getPrincipal());

    UsernamePasswordAuthenticationToken userToken = authentication;
    String userName = userToken.getName();
    userName = userName != null ? userName.toLowerCase() : userName;
    String password = userToken.getCredentials().toString();

    try {
        if (password == null || "".equals(password)) {
            log.debug("retrieveUser", "no password provided");
            throw new AuthenticationCredentialsNotFoundException(
                    "Invalid login or password");
        }
    }

    catch (AuthenticationCredentialsNotFoundException e) {
        log.debug("retrieveUser", "no password provided");
    }

    // connection with ldap and check retrieved username and password
    connect = connection(userName, password);

    if (connect) {
        log.debug("retrieve user", "correct connection with ldap");
        userDetail = new LdapUser();
        setUserDetails(userDetail, ctx, username);

    } else {
        log.error("retrieve user", "Failed connection");
    }

    log.exit("retrieveUser", "user logged: " + userDetail);
    return userDetail;
}

私のsecurity.xmlファイル

<http auto-config='true'>
    <intercept-url pattern="/**/*.ico" filters="none" />
    <intercept-url pattern="/**/*.gif" filters="none" />
    <intercept-url pattern="/**/*.jpg" filters="none" />
    <intercept-url pattern="/**/*.css" filters="none" />
    <intercept-url pattern="/**/*.js" filters="none" />
    <intercept-url pattern="/**/*.png" filters="none" />
    <intercept-url pattern="/logout.jsp*" filters="none" />
    <intercept-url pattern="/index.jsp*" filters="none" />
    <intercept-url pattern="/**" access="ROLE_USER,ROLE_ADMIN" />
    <logout logout-success-url="/index.jsp"/>


    <form-login login-page="/index.jsp"
    authentication-failure-url="/error_ldap.jsp" 
    default-target-url="/main_ldap.jsp" always-use-default-target="true" />                 
    </http>

<authentication-manager>
    <authentication-provider ref="ldapAuthenticationProvider">  
        <password-encoder hash="sha" /> 
    </authentication-provider>
</authentication-manager> 

ログインに成功すると main_ldap.jsp にリダイレクトされますが、認証に失敗するとこのエラーが発生します。retrieveUser メソッドで null を返す代わりに例外 UsernameNotFoundException をスローしようとしましたが (これは許可されていません)、何も起こりませんでした (私だけがこの例外を受け取りました)。

4

1 に答える 1

0

Java から LDAP に接続できます。

http://docs.oracle.com/javase/jndi/tutorial/ldap/security/ldap.html

ただし、Spring Security にはすでに LDAP 統合があるため、ここで説明する方法を使用できます。

http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ldap.html

...

独自の UserDetails サービスを使用するための xml 構成は次のとおりです。

<b:bean id="userDetailsService" class="your.class.here">
</b:bean>
<authentication-provider user-service-ref="userDetailsService">
</authentication-provider>
于 2013-01-15T15:23:12.633 に答える