2011-11-30 95 views
8

在spring security 3.0中,我們有AuthenticationProcessingFilter類,其中我們使用的是determineTargetUrl()方法,它根據不同的角色返回url。根據彈簧安全中的角色確定目標url 3.1

現在,我們正在移動到春季安全3.1.0.RC3,我卡住了,我應該如何確定基於不同角色的網址,因爲AuthenticationProcessingFilter類已從新版本中刪除。任何人都可以請簡要介紹一些代碼步驟,以便我可以實現自定義篩選器以重定向到不同頁面的不同角色。

回答

19

根據角色確定目標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有關,最好避免這種情況。