ロールに基づいてターゲット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に関連付けられているため、できないようにすることをお勧めします。