文章目录
- 概述
- 优点
- 核心概念
- Subject
- SecurityManager
- Realms
- 核心功能
- 认证
- 授权
- 会话管理
- 密码学
- Web支持
- URL-Specific过滤器链
- JSP标签库
概述
Apache Shiro是Apache Software Foundation的顶级项目之一。
Apache Shiro是一个强大且易用的Java安全框架,发音 “shee-roh”。可以 执行身份验证(Authentication)、授权(Authorization)、密码(Cryptography)、会话管理(Session Management)、Web集成(Web Integration)、Java集成等。
使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
优点
- 易用性:使用简单
- 全面:没有其他的安全框架具有Apache Shiro所宣称的广泛的范围,所以它可能是您的安全需求的“一站式商店”
- 灵活:Apache Shiro可以在任何应用环境中工作。虽然它在web、EJB和IoC环境中工作,但不需要它们。Shiro也没有要求任何规范,甚至没有很多依赖关系。
- Web能力:Apache Shiro提供了出色的Web应用程序支持,允许您基于应用程序url和Web协议(如REST)创建灵活的安全策略,同时还提供了一组JSP库来控制页面输出
- 可插拔:Shiro干净的API和设计模式使得它很容易与许多其他框架和应用程序集成。您将看到Shiro与Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin等框架无缝集成。
- 支持:Apache Shiro是Apache软件基金会的一部分,该组织已被证明以其社区的最佳利益行事。项目开发和用户组有友好的用户群体随时准备提供帮助。商业公司,如Katasoft也提供专业支持和服务,如果需要。
核心概念
Subject
主体。
Subject这个词是一个安全术语,它的基本意思是“当前执行的用户”。它之所以不叫“用户”,是因为“用户”这个词通常和人联系在一起。在安全领域,术语“Subject”可以指人,也可以指第三方进程、守护进程帐户或任何类似的东西。它只是指“当前正在与软件交互的东西”。对于大多数意图和目的,你可以把它看作Shiro的“用户”概念。
您可以在代码的任何地方轻松获取Shiro主体,如下所示:
import org.apache.shiro.subject.Subject;
import org.apache.shiro.SecurityUtils;
...
Subject currentUser = SecurityUtils.getSubject();
SecurityManager
安全管理器。
主体代表当前用户的安全操作,安全管理器是所有用户的安全操作。它是Shiro架构的核心,充当一种“伞形”对象,引用许多内部嵌套的安全组件,这些组件形成了对象图。然而,一旦安全管理及其内部对象图被配置好,应用程序开发人员通常会将其全部时间花费在主体API上。
每个应用程序几乎总是有一个SecurityManager实例。它本质上是一个应用单例(尽管它不需要是静态单例)。与Shiro中的几乎所有东西一样,默认的SecurityManager实现是pojo,并且可以通过任何与pojo兼容的配置机制进行配置——普通Java代码、Spring XML、YAML、.properties和.ini文件等等。基本上,可以使用任何能够实例化类和调用与javabean兼容的方法的方法。
Realms
领域。
领域充当Shiro和应用程序安全数据之间的“桥”或“连接器”。也就是说,当需要实际与安全相关数据(如用户帐户)进行交互以执行身份验证(登录)和授权(访问控制)时,Shiro会从为应用程序配置的一个或多个领域中查找其中的许多内容。
从这个意义上说,领域本质上是一个安全特定的DAO:它封装了数据源的连接细节,并使Shiro在需要时可以使用相关数据。
在配置Shiro时,必须指定至少一个用于身份验证和/或授权的域。可以配置多个领域,但至少需要一个。
Shiro提供了开箱即用的领域来连接许多安全数据源(也就是目录),如LDAP、关系数据库(JDBC)、文本配置源(如INI和属性文件)等等。
如果默认的领域不能满足您的需要,您可以插件自己的领域实现来表示自定义数据源。
核心功能
认证
认证是验证用户身份的过程。也就是说,当用户使用应用程序进行身份验证时,他们正在证明他们确实是他们所说的那个人。这有时也被称为“登录”。这是一个典型的三步过程。
- 收集用户的标识信息(称为主体)和身份的支持证明(称为凭据)。
- 向系统提交主体和凭证
- 如果提交的凭证与系统对该用户身份(主体)的期望相匹配,则认为该用户已通过身份验证。如果它们不匹配,则认为用户未通过身份验证。
授权
授权本质上是一种访问控制,控制用户可以访问应用程序中的哪些内容,比如资源、web页面等。
会话管理
Apache Shiro提供了安全框架是世界中独一无二的东西,在任何应用程序和任何架构层中都可用的一致会话API。
密码学
Shiro在加密方面的目标是简化和使用JDK的加密支持。
Shiro真正关注加密支持的两个领域是加密哈希(又名消息摘要)和加密密码。
Web支持
自定义过滤器。
URL-Specific过滤器链
Shiro通过其创新的URL过滤器链接功能支持特定于安全的过滤器规则。它允许您为任何匹配的URL模式指定特别的筛选器链。这意味着在使用Shiro的过滤机制来强制执行安全规则(或规则组合)方面,您有很大的灵活性——这比您仅在web.xml中定义过滤器要灵活得多。
过滤器名称(anon、user、perms、authc)是Shiro提供的与安全相关的特殊过滤器。
anon:无需认证即可访问。
authc:需要认证才可访问。
user:点击“记住我”功能可访问。
JSP标签库
Shiro还提供了一个JSP标记库,允许您根据当前主题的状态控制JSP页面的输出。
%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>