Apache Shiro 是java平台下的一个 安全框架。对比 Spring Security ,Apache Shiro简单好用。Spring Security相对复杂,但是实际工作中并不需要那么复杂的东西。所以使用 Shiro 的人也越来越多了。
1,Shiro能做什么?
①验证用户来核实他们的身份
②对用户进行访问控制
③在任何环境下使用 Session API,即使没有 Web 或 EJB 环境
④聚集一个或多个 用户安全数据 的数据源,并作为一个单一的 复合用户 “视图”
⑤启用单点登录(SSO)登录
⑥为没有登录的用户启用“Remember me”服务
⑦为登录用户启用“Run As...”服务
Authentication : 身份认证/登录。验证用户身份。
Authorization : 授权/权限验证。验证已认证用户是否拥有某个权限或角色。
Session Manager : 会话管理。会话可以是普通 JavaSE 环境,也可以是 JavaWeb 环境。Shiro内部实现了一套Session会话机制,在Web环境下默认使用Servlet容器的实现。
Cryptography : 加密,如密码加密。
Web Support : Web支持,可以非常容易的集成到Web环境。
Caching : 缓存支持。缓存认证用户的权限/角色信息。
Concurrency : shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限/角色自动传递过去。
Tesing:提供测试支持。
Run As:允许一个用户伪装为另一个用户(如果他们允许)的身份进行访问。
Remember Me : 记住我,即一次登陆后,下次再来的话不需要登陆。
2,Shiro是如何工作的?
①从外部来看Shiro的工作流程
Subject:主体,代表了当前登录用户
SecurityManager:安全管理器,Shiro核心组件。管理着所有Subject,并且所有安全相关的操作都会与该组件进行交互。
Realm : 域,Shiro 从 Realm 中获取安全数据(用户,角色,权限),也就是说SecurityManager要验证用户身份,那么它必须从 Realm 中获取相应的数据进行比较以确定登录用户的身份是否合法。可以把 Realm 看成是 DataSource,即安全数据源。
注意:Shiro不会维护用户/权限角色等信息,而是通过 Realm 让开发人员自己去注入。
②从内部来看Shiro的工作流程
Authenticator : 认证器,负责Subject的认证,这是一个扩展点,可以自定义实现;其需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了。
Authrizer : 授权器,或称访问控制器,用来决定Subject是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能。
SessionDAO : DAO嘛,数据访问对象,用户会话的CRUD。可以自定义自己的 SessionDAO,通过JDBC将写到数据库,或者写到Redis缓存中。
CacheManager : 缓存控制器,管理用户,角色,权限等数据的缓存;因为这些数据基本上很少去改变,放到缓存中可以提高访问的性能。