2012-01-18 44 views
0

當在控制器的方法我需要從(我使用的用戶權限和每網頁的用戶定製經常的ID)會話檢索某些數據,我寫方法是這樣的:如何避免把HttpSession放在Spring控制器的每個方法中?

@RequestMapping("something") 
public ModelAndView doSomething(HttpSession session) throws AuthorizationException{ 

PerUserModelBean bean = getSessionRelatedInfo(session); 

bean.checkPermissions(); 



...do my stuff... 

} 

這是無聊的,因爲我必須重複每個方法的會話參數,我必須把這些代碼放在每個方法的開始。不僅無聊,如果我想改變,我必須通過所有方法並改變它。我希望會話信息retriavial和checkPermissions方法在我的方法之前自動調用,然後具有根據會話內容自動填充的bean變量(可能作爲threadlocal?)。有什麼辦法可以做到這一點?

回答

0

將下面的方法放在一個超類中,您可以將它用作常用功能的基類。我相信你已經有一個,所以所有的子類都會繼承它。

爲了在每個方法執行前執行它:你可以使用Filters/Interceptors/AOP,其他人可能會給你更準確的想法。

protected HttpSession getSession(){ 
     ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); 
     return attr.getRequest().getSession(); 
    } 
+0

你是正確的基地控制器。我不知道RequestContextHolder ....謝謝。 – gotch4 2012-01-18 14:21:35

0

您應該將這種類型的「重複」的代碼在Servlet FilterSpring MVC Interceptor。這樣,如果與您的應用程序相關,您將能夠強制用戶登錄。

相關問題