我有一個使用經典三層的控制器服務和dao的Spring MVC應用程序。在Spring MVC中處理cookie
而且該應用程序中的相關型號包含User
Department
Project
。
一個用戶屬於一個部門,可能有很多項目屬於某個部門,各部門之間的組織爲樹狀結構,例如:
dep1
dep1-1
dep1-1-1
dep1-1-2
...
...
...
現在我有控制器列出項目:
class ProjectController{
private ProjectService projectService;
@RequestMapping("/list")
public String list(@RequestParameter("depId") String depId){
projectService.list(depId);
return "list";
}
}
ProjectServiceImpl implements ProjectService{
ProjectDao projectDao;
public List<Department> list(String depId){
}
}
看來,這是相當簡單的,但是我們有兩個問題:
1的結果過濾器。
根據該配置,當前用戶的部門可能(或不)正在考慮的查詢操作時,例如,當參數depId
爲dep1-1-1
,並且當前用戶屬於dep1-1-2
,那麼我們就應該返回空值。
如上所述,在某些情況下,此功能可能完全關閉。
2認證。
用戶認證和管理在另一個應用程序中提供,它將與我的應用程序部署在同一個域中,您可以認爲它們是/tomcat/webapps
中的兩個不同的文件夾。我們使用cookie來共享用戶信息:爲用戶保存一個令牌。
這意味着對於每一個請求,我都必須從cookie中獲取當前用戶的token(如果他們已經登錄),然後調用其他應用程序提供的服務來獲取department
等信息。
那麼在哪裏做部門檢查,在控制器或服務?我不確定注入HttpRequest
是否是一個好主意。
此外,由於控制器和服務與此類操作相關的控制器和服務太多,因此我想避免隨處可見的重複代碼。
有沒有更好的選擇?
好主意,但服務於用戶管理的其他應用程序目前不使用ss,並且有一點改變目前的項目結構。 – hguser
對於'postfilter'來查詢數據庫後會過濾結果,這在我們的應用程序中是不可接受的,因爲查詢可能很複雜,所以我們更喜歡在數據庫級別使用過濾條件。 – hguser