根據角色確定目標url的最佳方式是在Spring Security配置中指定一個目標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實現,它使用Spring Security命名空間配置所能完成的工作。一個完整的例子可以在我今年在SpringOne上發佈的SecureMail項目中找到。
另一種方法是您可以創建自定義AuthenticationSuccessHandler。該實現可能會擴展SaavedRequestAwareAuthenticationSuccessHandler,它是默認的AuthenticationSuccessHandler。它可以使用命名空間進行連線,如下所示。
<sec:http>
<sec:form-login authentication-success-handler-ref="authSuccessHandler"/>
</sec:http>
<bean:bean class="example.MyCustomAuthenticationSuccessHandler"/>
我不會推薦這樣做,因爲它與Spring Security API有關,最好避免這種情況。