2011-07-04 13 views
1

2つのレイヤーを使用して自分のWebサイトを保護する必要があります。最初はLDAPチェック、次にユーザー名/パスワードの入力です。私は両方のチェックの両方のカスタム認証フィルターを書いています。Spring Security 3の累積フィルタ

LDAPフィルタが失敗した場合、ユーザーは「アクセスが拒否されました」ページにリダイレクトされ、ユーザー名/パスワードが失敗した場合、ユーザーはログインページにリダイレクトされます。

config.xmlファイルでこれらのフィルタを設定するにはどうすればよいですか?ここで私は現在、

<sec:http entry-point-ref="loginAuthenticationEntryPoint" 
    auto-config="false" use-expressions="true"> 
    <sec:intercept-url pattern="/login.htm" access="isAnonymous()" /> 
    <sec:intercept-url pattern="/*" 
     access="hasRole('ROLE_LDAP') and hasRole('ROLE_CRESTA')" /> 

    <sec:custom-filter ref="ldapAuthenticationFilter" 
     before="FORM_LOGIN_FILTER" /> 
    <sec:custom-filter ref="usernameAuthenticationFilter" 
     position="FORM_LOGIN_FILTER" /> 
</sec:http> 

public class LdapAuthenticationFilter extends AbstractPreAuthenticatedProcessingFilter 

public class CrestaUsernameAuthenticationFilter extends AbstractAuthenticationProcessingFilter 

と持っているものを私の現在の考え方は、各フィルタが必要な役割の一つを追加するためですが、ときに、LDAPフィルタのdoesnれます両方の役割を追加する私はすぐにアクセスを拒否されます。すぐにあなたのLDAPフィルタが正常に返すようので

多く、私はそのアプローチが機能しないだろうと思い

答えて

0

を高く評価し、春のセキュリティは、ユーザーが完全に認証されたユーザ名/パスワードフィルタをスキップしてきたと考えています。

私はUserDetailsインスタンスを作成するためにCrestaに行くのではなく、ユーザー役割のためにLDAPサーバーも照会するように、標準フォームのログインセキュリティを使用してUserDetailsS​​erviceをカスタマイズします。

+0

ありがとうございました。 – davecass