2013-05-29 91 views
2

我試圖使用像@PreAuthorize和@Secured彈簧安全註釋,但我希望評估一個用戶不是在一個角色,但他們是否有權限在這種情況下,一個特定的實體公司。在我的控制器中,我收到一個包含firmId作爲參數的http請求,我想確保該用戶被授權給該公司。這可能使用當前的春季安全註釋嗎?我正在尋找一個優雅的解決方案,我一直在尋找自定義約束驗證器作爲jsr303規範的一部分。下面的方法頭。使用自定義彈簧安全註釋

public ModelAndView getSessionsJson(HttpServletRequest request, 
    HttpServletResponse response) throws ServletRequestBindingException {} 

回答

2

我認爲你可以做這樣的事情:

public ModelAndView getSessionsJson(HttpServletRequest request, HttpServletResponse response) throws ServletRequestBindingException { 
    Integer firmId = getFirmId(request); 
    Firm firm = getFirmById(firmId); 
    doSomeBusinessLogic(firm); 
    ..... 
} 

@PreAuthorize("hasPermission(#firm, 'admin')") 
public void doSomeBusinessLogic(Firm firm) { 
    .... 
} 

.... 

使用pre and post annotations一起選擇中與ACL module。當然,在您需要設置ACL DB schema併爲每個公司對象準備ACL權限之前。

+0

我喜歡使用訪問控制列表的想法,只是好奇,是否有任何性能提升呢?因爲編號想象入口表可能會變得非常大,有這麼多的用戶。 – john

+0

來自官方文檔:「Spring Security ACL模塊的主要功能之一是提供檢索ACL的高性能方式」。確保ACL足夠快速的唯一方法是填寫數據並檢查響應時間。 –