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

ShutTheFu2kUP 15天前 26

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

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

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

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

    https://note.youdao.com/ynoteshare1/index.html?id=cff4f444eedfdef3ced0feed44156857&type=note
  • lzk50136 10天前
    引用 11
    @ShutTheFu2kUP 学习了
  • avk458 10天前
    引用 12
    @ShutTheFu2kUP
    既然想要同一个类统一某些权限或者角色那么就用 antMatchers 匹配?
  • 游客
    13
返回