1、Shiro 简介
-
Apache Shir是一个强大且易用的Java安全框架,能够用于身份验证、授权、加密和会话管理。Shiro拥有易于理解的API,您可以快速、轻松地获得任何应用程序——从最小的移动应用程序到最大的网络和企业应用程序。
-
简而言之,Apache Shiro 是一个强大灵活的开源安全框架,可以完全处理身份验证、授权、加密和会话管理。
2、shiro作用
- 验证用户身份
- 用户访问权限控制
1、判断用户是否分配了一定的安全角色。
2、判断用户是否被授予完成某个操作的权限 - 在非 Web 或 EJB 容器的环境下可以任意使用Session API
- 可以响应认证、访问控制,或者 Session 生命周期中发生的事件
- 可将一个或以上用户安全数据源数据组合成一个复合的用户
- 支持单点登录功能
- 支持提供“Remember Me”服务,获取用户关联信息而无需登录
3、Shiro架构
-
Shiro有三个主要的概念:Subject,SecurityManager,Realms
-
Subject:用户,当前参与应用安全部分的用户,可以是第三方,或者任何东西。指正在与当前软件交互的东西。
所有Subject都需要SecurityManager,当你与Subject进行交互,这些交互行为实际上被转换为与SecurityManager的交互 -
SecurityManager:安全管理员,Shiro架构的核心。
-
Realms:Realms作为Shiro和你的应用的连接桥,当需要与安全数据交互的时候,像用户账户,或者访问控制,Shiro就从一个或多个Realms中查找。
Shiro提供了一些可以直接使用的Realms,如果默认的Realms不能满足你的需求,你也可以定制自己的Realms
4、Shiro 核心组件
-
UsernamePasswordToken,Shiro 用来封装用户登录信息,使用用户的登录信息创建令牌 Token,登录的过程即 Shiro 验证令牌是否具有合法身份以及相关权限。
-
SecurityManager,Shiro 的核心部分,负责安全认证与授权。
-
Subject,Shiro 的一个抽象概念,包含了用户信息。
-
Realm,开发者自定义的模块,根据项目的需求,验证和授权的逻辑在 Realm 中实现。
-
AuthenticationInfo,用户的角色信息集合,认证时使用。
-
AuthorizationInfo,角色的权限信息集合,授权时使用。
-
DefaultWebSecurityManager,安全管理器,开发者自定义的 Realm 需要注入到 DefaultWebSecurityManager 进行管理才能生效。
-
ShiroFilterFactoryBean,过滤器工厂,Shiro 的基本运行机制是开发者定制规则,Shiro 去执行,具体的执行操作就是由 ShiroFilterFactoryBean 创建一个个 Filter 对象来完成。
5、拦截链
认证过滤器:
anon:无需认证即可访问,游客身份。
authc:必须认证(登录)才能访问。
authcBasic:需要通过 httpBasic 认证。
user:不一定已通过认证,只要是曾经被 Shiro 记住过登录状态的用户就可以正常发起请求,比如 rememberMe。
授权过滤器:
perms:必须拥有对某个资源的访问权限(授权)才能访问。
role:必须拥有某个角色权限才能访问。
port:请求的端口必须为指定值才可以访问。
rest:请求必须是 RESTful,method 为 post、get、delete、put。
ssl:必须是安全的 URL 请求,协议为 HTTPS。