我们有一个应用程序,用户可以由管理员创建并将角色分配给特定类型的实体。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。它工作得很好。 –