2011-02-09 16 views
0

春のセキュリティでは、プロバイダとしてldapを使用します。春のセキュリティを迂回

あなたのユーザー/パスがデータベースの値と一致する場合、ログインできるようにするdevのフラグを反転させる変更に取り組んでいます。 LDAPサーバーがダウンしている可能性があり、あなたはまだログインできます。

何アイブがが実現すると、一部のURLが

@Secured({"ROLE_USER","ROLE_MERCHANT"}) 

ので、私はまだ私のために春のセキュリティといくつかの取引を持っている必要がありますで固定されていることです動作するログイン。これをどうやってやるの?

+0

をデータベース内のユーザーにすべてのそれらの役割を追加しますか? – OrangeDog

+0

いいえ、私はプログラムでそれらを理解することができます。この要件は多少のハックですが、それはdevでのみ行われます - 私は低俗なハックを書くための少しの余裕があります – mkoryak

答えて

2

1つのLDAPプロバイダと別のDAOプロバイダの2つのプロバイダをコンフィグレーションできます。

<sec:authentication-manager alias="authenticationManager"> 
    <sec:authentication-provider ref="yourLdapAuthenticationProvider" /> 
    <sec:authentication-provider ref="yourDaoAuthenticationProvider" /> 
</sec:authentication-manager> 

LDAPが失敗すると、DAO認証プロバイダに返されます。

yourDaoAuthenticationProviderにそのフラグを挿入するように独自の認証フィルタを設定する必要があります。その結果、認証がyourDaoAuthenticationProviderに戻ったときに、さらなる認証(開発中)を続行するか、生産中)。だから、あなたのauthenticationFilter、フラグを格納するsetDetails()をオーバーライドするには: -

myAuthenticationFilter豆これにより

@Override 
protected void setDetails(HttpServletRequest request, UsernamePasswordAuthenticationToken authRequest) { 
    YourObject yourObject = new YourObject(request.getParameter("devAuthAgainstDAO")); 
    authRequest.setDetails(yourObject); 
} 

、あなたのyourDaoAuthenticationProviderはさらに、認証に進む前に、このフラグに対してチェックする必要があります。

最後に、あなたの構成は次のようになります: -

<sec:http auto-config="false" entry-point-ref="loginUrlAuthenticationEntryPoint"> 
    <sec:logout logout-success-url="/login.jsp"/> 
    <sec:intercept-url ... /> 

    <sec:custom-filter position="FORM_LOGIN_FILTER" ref="myAuthenticationFilter"/> 
</sec:http> 

<bean id="myAuthenticationFilter" class="[YOUR_CUSTOM_AUTHENTICATION_FILTER]"> 
    <property name="authenticationManager" ref="authenticationManager"/> 
    <property name="authenticationFailureHandler" ref="failureHandler"/> 
    <property name="authenticationSuccessHandler" ref="successHandler"/> 
</bean> 

<bean id="loginUrlAuthenticationEntryPoint" 
     class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
    <property name="loginFormUrl" value="/login.jsp"/> 
</bean> 

<bean id="successHandler" 
     class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"> 
    <property name="defaultTargetUrl" value="/welcome.jsp"/> 
    <property name="alwaysUseDefaultTargetUrl" value="true"/> 
</bean> 

<bean id="failureHandler" 
     class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> 
    <property name="defaultFailureUrl" value="/login.jsp?login_error=1"/> 
</bean> 


<bean id="yourLdapAuthenticationProvider" ... /> 

<bean id="yourDaoAuthenticationProvider" ... /> 

<sec:authentication-manager alias="authenticationManager"> 
    <sec:authentication-provider ref="yourLdapAuthenticationProvider"/> 
    <sec:authentication-provider ref="yourDaoAuthenticationProvider"/> 
</sec:authentication-manager> 
関連する問題