Spring Security 的注解权限校验 @PreAuthorize 有没有类似于 Shiro 中 @RequirePermission 的通配符匹配啊?

2020-07-29 20:25:22 +08:00
 ShutTheFu2kUP

Shiro 中 user:* 的权限能够匹配以下任意一种

@RequirePermission("user:select")
@RequirePermission("user:insert")
@RequirePermission("user:update")
@RequirePermission("user:delete")

Spring Security 看了以下 @PreAuthorize 里的 hasAuthority() 方法的源码,貌似是没有做类似的通配符匹配。目前的解决办法是自己写了一个比较器,但是这样每个 Controller 都要注入这个比较器,比较麻烦,不知道有没有更好的解决方式?

2934 次点击
所在节点    Java
11 条回复
vemier
2020-07-29 22:40:47 +08:00
写完自定义类加一下配置就可以了,为什么每个 Controller 都要注入
vemier
2020-07-29 22:42:36 +08:00
可以用 @PreAuthorize 的 hasPermission,然后自己实现一个 PermissionEvaluator 暴露成 Bean,Spring Security 会自动注入并调用进行鉴权
changwei
2020-07-30 05:02:57 +08:00
这个甚至不需要 spring security,直接自己在 springmvc 的拦截器中通过第三个 ctx 参数获取到请求 action 的上下文,然后通过反射读取 ctx 上面的你自己写的注解是否存在以及参数为何来增加相应的权限逻辑。。。
ShutTheFu2kUP
2020-07-30 09:28:14 +08:00
@vemier 可以了,感谢大佬。之前是因为我写的类不是实现 PermissionEvaluator 接口,所以在每个 Controller 都注入了这个类,然后在 hasAuthority 的 EL 表达式中再调用这个类的方法。
ShutTheFu2kUP
2020-07-30 09:29:55 +08:00
@changwei 既然都接 Spring Security 了,如果 Spring Security 能够解决的肯定交由 Spring Security 来解决会更好吧。用拦截器又感觉有点造轮子的意思...总之也感谢大佬的回复。
avk458
2020-07-30 09:38:45 +08:00
hasAnyAuthority hasAnyRole 都不适用吗
playboy0
2020-07-30 10:00:53 +08:00
@ShutTheFu2kUP 老哥方面给几行演示代码嘛,初学 Security,有点困惑如何实现~,感谢
ShutTheFu2kUP
2020-07-30 10:32:40 +08:00
@avk458 这样的话不是每个地方都要写一个*吗...还是用一个类里面统一处理好一点吧
```
@hasAnyAuthority('authority1', '*')
@hasAnyAuthority('authority2', '*')
@hasAnyAuthority('authority3', '*')
```
ShutTheFu2kUP
2020-07-30 10:47:00 +08:00
@playboy0 V2 好像回复解析不了 markdown,我写在有道云笔记里了,不过我也是刚接触不久..有的也可能有问题。

https://note.youdao.com/ynoteshare1/index.html?id=cff4f444eedfdef3ced0feed44156857&type=note
lzk50136
2020-07-30 16:31:24 +08:00
@ShutTheFu2kUP 学习了
avk458
2020-07-31 09:01:17 +08:00
@ShutTheFu2kUP
既然想要同一个类统一某些权限或者角色那么就用 antMatchers 匹配?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/694140

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX