2011-11-30 9 views
8

春のセキュリティ3.0では、異なる役割に基づいてURLを返したdetermineTargetUrl()メソッドを使用していたAuthenticationProcessingFilterクラスを使用しています。春のセキュリティの役割に基づいてターゲットURLを決定する3.1

今、私たちは春のセキュリティ3.1.0.RC3に移行しています。AuthenticationProcessingFilterクラスが新しいバージョンから削除されたため、さまざまな役割に基づいてURLを判断する必要があります。他の人のために別のページにリダイレクトするカスタムフィルタを実装できるように、誰かが私にいくつかのコードを簡単に教えてください。

答えて

19

ロールに基づいてターゲットURLを判断する最も良い方法は、以下に示すように、SpringセキュリティコンフィグレーションでターゲットURLを指定することです。これはSpring 3.0または3.1で機能します

<http> 
    ... 
    <form-login login-page="/login" default-target-url="/default"/> 
</http> 

次に、default-target-urlを処理するコントローラを作成します。コントローラは、ロールに基づいてリダイレクトまたは転送する必要があります。以下はSpring MVCの使用例ですが、どのタイプのコントローラ(Struts、Servletなど)でも動作します。

@Controller 
public class DefaultController { 
    @RequestMapping("/default") 
    public String defaultAfterLogin(HttpServletRequest request) { 
     if (request.isUserInRole("ROLE_ADMIN")) { 
      return "redirect:/users/sessions"; 
     } 
     return "redirect:/messages/inbox"; 
    } 
} 

このアプローチの利点は、それはセキュリティの任意の特定の実装に結合されていないが、それは特定のMVCの実装に結合され、そしてそれは春のセキュリティの名前空間の構成で簡単に動作していません。今年私がSpringOneで発表したSecureMailプロジェクトでは完全な例が見つかります。

別の方法として、カスタムAuthenticationSuccessHandlerを作成することができます。実装は、デフォルトのAuthenticationSuccessHandlerであるSavedRequestAwareAuthenticationSuccessHandlerを拡張するかもしれません。次のように名前空間を使用して配線することができます。

<sec:http> 
    <sec:form-login authentication-success-handler-ref="authSuccessHandler"/> 
</sec:http> 
<bean:bean class="example.MyCustomAuthenticationSuccessHandler"/> 

これはSpring Security APIに関連付けられているため、できないようにすることをお勧めします。

関連する問題