【问题标题】:Spring security use hasPermission within PreAuthorize with only one parameterSpring security 在 PreAuthorize 中使用 hasPermission,只有一个参数
【发布时间】:2013-10-23 22:28:46
【问题描述】:

如何只用一个参数调用 hasPermission 函数?

目前我有这样的事情:

@PreAuthorize("hasPermission('someResource', 'READ')")

我希望能够做到这一点:

@PreAuthorize("hasPermission('canReadSomeResource')")

有没有一种简单的方法可以做到这一点?我基本上只想指定调用方法所需的权限,而不是资源和权限。

【问题讨论】:

    标签: java spring security spring-security acl


    【解决方案1】:

    hasPermission() 的具体用途是检查用户是否有权对特定域对象执行操作。如果您只想检查用户是否具有某种通用权限,则应使用hasRole()

    【讨论】:

    • 好的,除了hasRole()还有别的吗?在我的模型中,每个角色都分配了一组权限,我想注释一个需要权限的方法。这样我不知道哪些角色是有效的,我希望能够检查用户对特定权限的角色。
    • @user1751547 您使用的是什么身份验证提供程序?一般的建议是让每个权限都成为授权,并将它们全部添加到用户列表中。
    • 我已经扩展了 AbstractUserDetailsAuthenticationProvider。这个问题的答案似乎表明我可以做我想做的事情:stackoverflow.com/questions/18097152/…我不知道如何实现它。
    【解决方案2】:

    我认为您需要hasAuthority('canReadSomeResource') 来检查用户访问资源的权限。

    @PreAuthorize("hasAuthority('canReadSomeResource')")
    public void myMethod(){
       ...
    }
    

    可以通过实现UserDetailsService 接口将该权限(canReadSomeResource)提供给spring security。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 2018-02-03
      • 2017-04-12
      • 1970-01-01
      • 2017-10-30
      • 2015-09-13
      • 2021-06-28
      相关资源
      最近更新 更多