1.Apache Shiro(认证,授权)基本介绍

目录


Shiro专栏目录(点击进入…)



Apache Shiro(认证,授权)基本介绍

什么是Apache Shiro?

Apache Shiro是一个功能强大且灵活的开源安全框架,可以干净地处理身份验证授权企业会话管理加密,提供了一种直观,全面的身份验证、授权、加密和会话管理解决方案

Apache Shiro的首要目标是易于使用、理解。安全有时可能非常复杂,甚至会很痛苦,但这不是必须的。框架应尽可能掩盖复杂性,并公开简洁直观的API,以简化开发人员确保其应用程序安全的工作
官网http://shiro.apache.org/

同类的比较知名的安全框架还有Spring Security,Shiro的优点是比较简洁,功能虽然比不上Spring Security多样,但对于安全需求不多的时候可以使用Shiro


Apache Shiro设计目标通过直观且易于使用来简化应用程序安全性
Shiro的核心设计模拟了大多数人如何在与某人(或某物)与应用程序进行交互的情况下如何考虑应用程序安全性

软件应用程序通常是根据用户案例设计的。也就是说,通常会根据用户与软件的交互方式来设计用户界面或服务API

例如:如果与应用程序交互的用户已登录,显示一个按钮,可以单击以查看其帐户信息。如果尚未登录,将显示一个注册按钮
编写应用程序主要是为了满足用户需求。即使“用户”是另一个软件系统,而不是人类,仍然可以编写代码以根据当前正在与应用程序进行交互的人员(或内容)来反映行为

Shiro在自己的设计中反映了这些概念。通过匹配软件开发人员已经很直观的内容,Apache Shiro仍然保持直观且易于在几乎任何应用程序中使用


Apache Shiro可以进行以下操作

(1)验证用户身份以验证其身份
(2)对用户执行访问控制
            确定是否为用户分配了特定的安全角色
            确定是否允许用户做某事
(3)即使在没有Web或EJB容器的情况下,也可以在任何环境中使用Session API
(4)在身份验证,访问控制或会话的生存期内对事件做出反应
(5)汇总1个或更多用户安全数据的数据源,并将其全部显示为单个复合用户“视图”
(6)启用单点登录(SSO)功能
(7)启用“记住我”服务以进行用户关联,而无需登录

等等。所有这些都集成到一个易于使用的统一API中

Shiro尝试在所有应用程序环境中实现这些目标。从最简单的命令行应用程序到最大的企业应用程序,而不必强加对其他第三方框架,容器或应用程序服务器的依赖。当然,该项目旨在尽可能地整合到这些环境中,但是它可以在任何环境中直接使用


Apache Shiro功能

Apache Shiro是具有许多功能的全面的应用程序安全框架。下图显示了Shiro集中精力的地方
在这里插入图片描述


应用程序安全性四个基石

Shiro以Shiro开发团队所谓的“应用程序安全性的四个基石”为目标:身份验证,授权,会话管理和加密


(1)身份验证

有时称为“登录”,这是证明用户身份的行为


(2)授权

访问控制的过程,即确定“谁”有权访问“什么”


(3)会话管理

即使在非Web或EJB应用程序中,也可以管理用户特定的会话


(4)加密

使用密码算法保持数据安全,同时仍然易于使用


支持特性

在不同的应用程序环境中,还具有其他功能来支持和加强这些问题


(1)Web支持

Shiro的Web支持API可帮助轻松保护Web应用程序的安全


(2)缓存

缓存是Apache Shiro API的第一层公民,可确保安全操作保持快速有效


(3)并发性

Apache Shiro的并发功能支持多线程应用程序


(4)测试

测试支持可以帮助编写单元测试和集成测试,并确保代码将按预期进行保护


(5)“运行方式”

一种功能,允许用户采用其他用户的身份(如果允许),有时在管理方案中很有用


(6)“记住我”

在整个会话中记住用户的身份,因此只需要在必要时登录


高层概述

在最高概念层次,从整体概念上理解Shiro体系架构有3个主要的概念
①Subject(主体)
②SecurityManager(安全管理器)
③Realms(领域)

Shiro提供了开箱即用的领域,可以连接到许多安全数据源(又名目录),例如LDAP,关系数据库(JDBC),文本配置源(例如INI和属性文件)等。如果默认的Realms不能满足需求,那么可以插入自己的Realm实现以表示自定义数据源
像其他内部组件一样,Shiro SecurityManager管理着如何使用领域来获取要表示为Subject实例的安全性和身份数据

在这里插入图片描述


(1)Subject(主题,也就是用户)

主题是当前正在操作的用户的特定数据集合。主题可以是一个人,也可以代表第三方服务,守护进程,定时任务或类似的东西,也就是几乎所有与该应用进行交互的事物

Subject实例都绑定到(并要求)SecurityManager。当与互动时Subject,这些互动会转化为与主题相关的互动SecurityManager


(2)Security Manager (安全管理器)

Shiro体系结构的核心,扮演了类似于一把“伞”的角色,主要负责协调内部的各个组件,这些安全组件一起形成一张安全网。但是,一旦为应用程序配置了SecurityManager及其内部对象图,通常就不理会它,并且应用程序开发人员几乎所有时间都花在Subject API上


(3)Realms(领域)

Shiro与应用程序安全数据之间的“桥梁”或“连接器”。当真正需要与安全性相关的数据(例如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从一个或多个为应用程序配置的领域中查找许多此类内容(从Realms中获取这些数据)

Realms本质上是特定于安全性的DAO:它封装了数据源的连接详细信息,并根据需要使关联数据可用于Shiro。在配置Shiro时,至少指定一个领域用于身份验证/授权,SecurityManager可与多个境界被配置,但至少有一个是必需的

配置Shiro时,可以配置多个Realm,必须至少指定一个Realm,用于认证(或)授权。Shiro内置了可以连接大量安全数据源(又名目录)的Realm,如LDAP、关系数据库(JDBC)、类似INI的文本配置资源以及属性文件等。如果缺省的Realm不能满足需求,可以插入代表自定义数据源的Realm实现


为什么使用Shiro?Shiro解决了什么问题?

在以往的权限管理中,权限管理通常是有以下几个步骤
1.创建用户,分配权限
2.用户登录,权限拦截器拦截请求,识别当前用户登录信息
3.从权限表中判断是否拥有权限


从以上步骤中可以提取到以下三个问题:

1.如何让Shiro拦截请求

在Web开发中,Shiro会提供一个拦截器来对请求进行拦截


2.Shiro如何判断发起请求用户的身份?

在Web开发中,会借助Session判断,如果禁用了Session,那么可能需要重写一些方法


3.如何判断权限?

Shiro使用Realm(领域)判断权限


Shiro功能细分


(1)Authentication:身份验证

身份认证/登录,验证用户是不是拥有相应的身份


(2)Authorization:授权

授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限


(3)Session Manager:会话管理

会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的


(4)Cryptography:加密

加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储


(5)Web Support:Web

Web支持,可以非常容易的集成到Web环境


(6)Caching:缓存

缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率


(7)Concurrency:并发验证

Shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去


(8)Testing:测试

提供测试支持


(9)Run As:伪装

允许一个用户假装为另一个用户(如果他们允许)的身份进行访问


(10)Remember Me:记住我,自动登录

记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。


注意:Shiro不会去维护用户、维护权限;这些需要自己去设计/提供;然后通过相应的接口注入给Shiro即可


Shiro和Spring Security比较?

(1)Shiro比Spring Security更容易使用、实现、理解
(2)Spring Security更加知名的唯一原因是因为品牌名称
(3)“Spring”以简单而闻名,但讽刺的是很多人发现使用Spring Security很难
(4)Spring Security有更好的社区支持
(5)Apache Shiro在Spring Security处理密码学方面有一个额外的模块
(6)Spring Security对Spring 结合较好,如果项目用的Spring Mvc,使用起来很方便。但是如果项目中没有用到spring,那就不要考虑它
(7)Shiro功能强大、且简单、灵活。是Apache下的项目比较可靠,且不跟任何的框架或者容器绑定,可以独立运行

Spring SecurityShiro
Spring Security是一个重量级的安全管理框架Shiro则是一个轻量级的安全管理框架
Spring Security概念复杂,配置繁琐Shiro概念简单、配置简单
Spring Security功能强大Shiro功能简单
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未禾

您的支持是我最宝贵的财富!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值