我們有一個應用程序,用戶可以由管理員創建並將角色分配給特定類型的實體。Spring MVC中的自定義授權
例如,如果實體被稱爲Student
,應用程序的用戶有不同程度的優惠,如:
- VIEWER - 查看學生詳細介紹
- 編輯器 - 編輯學生詳細介紹
- 出口商 - 出口學生詳細信息
用於執行上述操作的URI如下所示:
GET
-/content/{classId}/{studentId}/view
PUT
-/content/{classId}/{studentId}
GET
-/content/{classId}/{studentId}/export
POST
-/content/{classId}/{studentId}/export
注意,URI是一個動態性的。此外,給定用戶User A
可以被分配VIEWER
角色Class 1
和EXPORTER
對於Class 2
。
在我的spring-security配置中,我只定義了兩個權限 - ADMINISTRATOR
和USER
。
ADMINISTRATOR
- 可以訪問所有USER
- 除了/admin/*
URI可以訪問一切。
角色VIEWER
,EDITOR
,EXPORTER
不是彈簧安全角色。現在我遇到了一個問題,同時限制用戶訪問他們沒有權限的資源。
此外,如果用戶沒有EXPORTER
權限,他甚至不應該看到按鈕(放置在應用程序的某處)。也許我可以用彈簧的security
taglib來做到這一點。但這完全是另一個問題。
我可以讓他們的安全意識,但問題是我在哪裏把我的邏輯閱讀{studentId}
(@PathVariable
)並匹配它與當前登錄的用戶,以檢查他是否有權訪問它。
我甚至想到創建一個過濾器/ HandlerInterceptor
,在/content/*
上偵聽的想法。但是我將不得不做一些醜陋的事情,比如解析URI,自己提取第二個路徑參數,然後檢查數據庫。
有沒有更優雅的,彈簧安全的做法呢?
任何想法的歡迎。
我個人使用Shiro。它工作得很好。 –