2013-02-07 29 views
1

比方說,我有兩種方法做相關但不同的東西@Controller。我想在相同的URL端點上公開它們,但根據安全上下文具有不同的功能。現在我知道,我能有一個映射請求方法和調度,以我的類中不同的效用函數,但我可以線它使Spring MVC的將根據什麼來在處理調度給我嗎?Spring安全註解是否會影響Spring MVC調用的派發?

作爲一個稻草人例如,有代碼ROLE_ADMIN和ROLE_USER之間的調度,但我的實際使用情況是塊好更加複雜:

@Controller 
public class Controller { 

    @RequestMapping("/api/thing") 
    @PreAuthorize("hasRole('ROLE_ADMIN')") 
    public String doAnAdministrativeThing() { 
     ... (admin-priviledge stuff goes here) 
    } 

    @RequestMapping("/api/thing") 
    @PreAuthorize("hasRole('ROLE_USER')") 
    public String doADifferentThing() { 
     ... (normal-priviledged stuff goes here) 
    } 

} 

搶佔任何兔子洞:

  1. 不,我可能沒有任何選擇餘地具有兩種功能不同的URL或有不同的參數或任何「正常」 @RequestMapping位

  2. 安全上下文差異是複雜的,但可以在@PreAuthorize表達內處理

  3. 其實有兩個以上不同的情況下派遣上

回答

2

我認爲這是行不通的,全球性的方法安全與MVC層完全沒有關係。 而且它的正式推薦使用這種方法的安全性only for the service layer

一般我們會在服務 層而不是單個網絡控制器推薦應用方法的安全性。

附:一般來說,我儘量避免使用AOP與Spring控制器,以及(在servlet上下文,而不是)宣佈AOP方法只有在根上下文,因爲進行代理控制器實例會導致一些混亂行爲,並強制用戶知道Spring AOP的具體的事情像JDK代理和CGLIB代理之間的差異,說明如何處理等

+0

這是我從文檔中獲得的印象,但它似乎是我想要檢查的一種有用模式。謝謝。 – jricher