系统权限控制体系



文 / 阿里P7工程师   严明明

目录

  • 访问控制的本质:

  • 访问控制需要完成的两个任务:

  • 访问控制理论模型:

  • Java常用访问控制框架:

  • 权限系统的演变历史:

  • 1: 标准的JAAS 时代;

  • 2: 单点登录(SSO)+接口鉴权时代;

  • 3: 统一登录(分布式Session) + 接口鉴权时代;


在 Web 应用开发中,安全一直是非常重要的一个方面。安全虽然属于应用的非功能性需求,但是应该在应用开发的初期就考虑进来。


比如我们开放的功能页面需要登录授权之后才能访问,一些功能需要具备特定权限的人才能操作;再比如我们开放了数据API接口,如果不做访问控制,那么任何人都可以调用,当被不法分子操作时将给我们带来巨大的麻烦。


那么在Java 整个体系中访问控制是否有一套理论技术支撑呢,我们是否可以做一个通用性的访问控制系统来完成分布式系统架构下的复杂的权限控制?


接下来会一一介绍。

访问控制的本质
OA权限管理分为: 人员管理 角色管理 模块管理 其实有这样一些概念: 主体:用户和角色可以称为主体。 资源:就是可以进行crud的对象。 权限:就是对资源的crud操作。 授权:就是对这种权限的分配。 认证:就是查询用户是否有权限。 用户和角色的关系是多对多,这共同组成了主体。 模块是资源。 主体和资源的纽带是ACL(访问控制列表),主体和ACL之间是多对多关系,资源和ACL之间也是多对多关系。ACL里面就记录了用户的权限。 在数据库上它就是一个中间表的作用。 授权是这样的: 授权分为两种: 角色授权 对角色统一授权,继承这种角色的用户就自动拥有该角色所拥有的权限,并且权限分有优先级,这样两种权限如果之间发生冲突则取高优级。 用户授权 对用户进行单独授权,这种情况必须在不继承角色的情况下才能生效,并且此时只使用单独授权的权限。 每一次授权都是针对特定模块,而不是所有。 搜索用户所有授权过程是这样的: 1、查询用户所有角色的权限,按优先给从低到高,有重复的可以以高优先级覆盖。(存入Map中,key是资源标识) 2、查询用户直接授予的权限。查询不继承的权限。 3、合并权限。 4、再从中选择具体的权限(crud)。 认证过程是这样的: 根据用户标识和资源标识查找ACL实例 有实例: 查看是否有确定授权 确定:返回授权 不确定(继承):查询用户拥有角色列表,根据角色标识和资源标识查找ACL实例(循环) 没有实例: 查询用户拥有角色列表,根据角色标识和资源标识查找ACL实例(循环)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值