Shiro1-基础知识

什么是Shiro

Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。

Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在 JavaSE 环境,也可以用在 JavaEE 环境。Shiro 可以帮助我们完成:认证、授权、加密、会话管理、与 Web 集成、缓存等。

什么是权限管理

权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源.

注意:权限管理包括用户认证和授权两部分.

用户认证

用户去访问系统,系统要验证用户身份的合法性.比如用户名密码 指纹打卡机等. 当我们通过用户名密码成功登录(用户认证通过),用户才能访问系统资源.

用户认证流程

用户认证流程

用户认证时用到的关键对象

Subject(主体) 我们可以理解为用户或程序
例如:
用户:用户直接操作我们的系统
程序:我们通过远程接口调用我们的系统.
所以只要访问系统资源的我们都将它称为主体,系统都需要对主体进行身份认证.

principals(身份信息)
通常是唯一的,但是一个主体可以有多个身份信息.
注意:不管一个主体有几个身份信息, 这个主体都必须有一个身份信息.

credentials(凭证信息)
只有主体知道的安全值,如密码 / 数字证书等

总结: 主体在进行身份认证时需要提供身份信息和主体信息.


用户授权

当我们用户认证通过(例如通过用户名密码登录系统), 系统再判断你是不是有访问这个资源权限.如果有权限才能访问.

用户授权流程

用户授权流程

用户授权时用到的关键对象

授权的过程理解为: who 对 what(which) 进行 how 操作.
who: 主体即主体,主体在认证通过后系统进行访问控制.
what(which): 资源(Resource) ,主体必须具备资源的访问权限才能访问资源.比如:系统用户列表页面,商品修改菜单,商品ID为001的商品信息.
how: 权限(permission), 针对资源的权限或许可, 主体必须具有对应的权限才能访问资源.比如: 用户添加,用户修改 商品删除.

分配权限

用户需要分配相应的权限才可访问相应的组员.权限是对资源的操作许可.
通常给用户分配资源权限需要将权限信息持久化.比如存储在关系数据库中.

权限模型

权限模型

上图常被称为权限管理的通用模型,不过企业在开发中根据系统自身的特点还会对上图进行修改,但是用户、角色、权限、用户角色关系、角色权限关系是需要去理解的。


权限控制

基于角色的访问控制

系统角色包括: 部门经理 总经理等,角色对用户来划分.
系统代码中实现:

//如果 user是部门经理才能访问if中的代码
if(user.hasRole("部门经理")){
    //系统资源内容
}

这样做大家可以想一下,如果我们在添加一种角色可以访问我们的某个资源.例如总经理和部门经理都能查看用户报表,那么就需要将代码改为如下

if(user.hasRole("部门经理") || user.hasRole("总经理")){
    //系统资源内容
    //用户报表
}

基于权限的访问控制

还是用访问报表来说,当用户有访问报表的权限的时候才能访问报表,这时代码改成如下.

if(user.hasPermission("查看报表权限")){
    //系统资源内容
    //用户报表
}

使用这种方法就可以解决我们上边的问题,例如现在财务也需要查看用户报表,如果使用角色访问控制的话我们就需要修改代码,而是用权限控制的话,我们只需要给财务这个角色分配一个查看报表的权限就可以了,而不需要改代码.

Shiro框架图

Shiro框架图

看最上面一层有c++ 和c#等语言,但是他们都是subject。

subject:主体,可以是用户也可以是程序,主体要访问系统,系统需要对主体进行认证和授权。

securityManager:安全管理器,主体进行认证和授权都是通过securityManager进行。

authenticator:认证器,主体进行认证最终是通过authenticator进行的。

authorizer:授权器,主体进行授权最终通过authorizer进行的。

sessionManager:web应用中一般是用web容器进行session管理,但是shiro也提供了一套session管理的机制方式。

有人可能会问直接用web容器的不就好了吗?为什么要自己提供呢?
答:因为 shiro 不仅可以应用于 web 系统还可以用于 c/s 系统,分布式系统等.

与 sessionManager 对应的有一个 sessionDao用于管理 session 数据.

cacheManager: 缓存管理器,主要对 session 和授权数据进行缓存.比如将授权数据通过 caheManager 进行缓存管理, 可以和 ehcache 整合进行缓存管理.

realm: 领域, 相当于数据源, 通过 realm 存取认证 授权相关数据.
注意:realm中存在认证和授权的逻辑,因为authenticator和authorizer是接口,有一些默认实现,这些默认实现最终都会调用 realm.

cryptograph: 提供了一套加密/解密的组件.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,412评论 25 707
  • 一:基础概念 什么是权限管理 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制的资源用户首先经...
    QGUOFENG阅读 551评论 0 0
  • 我们的肩膀 原本担负起 历史的责任, 用手中的笔墨 书写着国家的兴盛衰亡, 集合人民的舆论 代表广大群众的思想, ...
    坡山俯望君阅读 232评论 0 0
  • 欢喜 旧时拿诗换酒钱,欢迎打赏。
    叫我七叔阅读 1,805评论 18 26
  • 说要做什么事,总是懒懒的不愿去做,怎么好好生活,不懂自己唉。 永远怎样,永远怎样,是要先做好基础的。
    不好听的时光阅读 145评论 0 0