java权限控制详解,比较全

  1. 权限控制是什么        

        权限一词在安全领域出现的频率很高。“权限”实际上是一种“能力”。对于权限的合理分配,一直是安全设计中的核心问题。

        权限控制,广泛应用于各个系统中。抽象地说,都是某个主体( subject)对某个客体( object)需要实施某种操作( operation),而系统对这种操作的限制就是权限控制。

        在Web应用中,根据访问客体的不同,常见的访问控制可以分为 “基于URL的访问控制”、“基于方法( method)的访问控制” 和 “其于数据的访问控制” 。

        2.怎么做

下面我们将探讨如何设计一个访问控制系统

垂直权限管理

        权限控制实际上是建立用户与权限之间的对应关系,现在应用广泛的一种方法,就是“基于角色的访问控制(Role- Based Access Control)”,简称RBAC

        

        RBAC事先会在系统中定义出不同的角色,不同的角色拥有不同的权限,一个角色实际上就是一个权限的集合。而系统的所有用户都会被分配到不同的角色中,一个用户可能拥有多个角色,角色之间有高低之分(权限高低)。在系统验证权限时,只需要验证用户所属的角色,然后就可以根据该角色所拥有的权限进行授权了。
        Spring Security中的权限管理,就是RBAC模型的一个实现。

权限管理其实是业务需求上的一个问题,需要根据业务的不同需求来实现不同的权限管理。因此很多时侯,系统都需要自己定制权限管理。定制一个简单的权限管理系统,不妨选择RBAC模型作为依据。
        这种基于角色的权限管理(RBAC模型),我们可以称之为“垂直权限管理”。
        不同角色的权限有高低之分。高权限角色访问低权限角色的资源往往是被允许的,而低权限角色访问高权限角色的资源往往则被禁止。如果一个本属于低权限角色的用户通过一些方法能够获得高权限角色的能力,则发生了“越权访问”。
        在配置权限时,应当使用“最小权限原则”,并使用“默认拒绝”的策略,只对有需要的主体单独配置“允许”的策硌。这在很多时候能够避免发生“越权访问”。

水平权限管理

        用户A与用户B可能都属于同一个角色 Rolex,但是用户A与用户B都各自拥有一些私有数据,在正常情况下,应该只有用户自已才能访问自己的私有数据。

        但是在RBAC这种“基于角色的访问控制”模型下,系统只会验证用户A是否属于角色Rolex,而不会判断开户A是否能访问只属于用户B的数据 DataB,因此,发生了越权访问这种问题,我们就称之为“水平权限管理问题”。

        相对于垂直权限管理来说,水平权限问题出在同一个角色上。系统只验证了能访问数据的角色,既没有对角色内的用户做细分,也没有对数据的子集做细分,因此缺乏一个用户到数据之间的对应关系。由于水平权限管理是系统缺乏一个数据级的访问控制所造成的,因此水平权限管理又可以称之为“基于数据的访问控制”。
        在今天的互联网中,垂直权问题已经得到了普遍的重视,并已经有了很多成熟的解决方案。但水平权限问题却尚木得到重视。后面会提到我经历过的一些解决方案。
        首先,对于一个大型的复杂系统来说,难以通过扫描等自动化测试方法将这些问题全部找出来其次,对于数据的访问控制,与业务结合得十分紧密,有的业务有数据级访问控制的需求,有的业务则没有,要理清楚不同业务的不同需求,也不是件容易的事情。
        最后,如果在系统已经上线后再来处理数据级访问控制问题,则可能会沙及跨表、跨库查询,对系统的改动较大,同时也可能会影响到性能。
        这种种原因导致了现在数据级权限管理并没有很通用的解决方案,一般是具体问题具体解决。一个简单的数据级访问控制,可以考虑使用“用户组( Group)”的概念。比如一个用户组的数据只属于该组内的成员,只有同一用户组的成员才能实现对这些数据的操作
        此外,还可以考虑实现一个规则引擎,将访问控制的规则写在配置文件中,通过规则引擎对数据的访问进行空制。

        3.我经历过的一些权限控制的案例

        后面讲一下我经历过的一些权限控制的案例,分别是菜单权限、接口权限、数据权限的控制。

一、菜单权限控制,可以参考开源的spring blade 框架

前端

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值