什么是Apache Shiro?

Apache Shiro(发音为“shee-roh”,日语“堡垒(Castle)”的意思)是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可为任何应用提供安全保障 - 从命令行应用、移动应用到大型网络及企业应用。

Shiro为解决下列问题(我喜欢称它们为应用安全的四要素)提供了保护应用的API:

  • 认证 - 用户身份识别,常被称为用户“登录”;
  • 授权 - 访问控制;
  • 密码加密 - 保护或隐藏数据防止被偷窥;
  • 会话管理 - 每用户相关的时间敏感的状态。

Subject

在考虑应用安全时,你最常问的问题可能是“当前用户是谁?”或“当前用户允许做X吗?”。当我们写代码或设计用户界面时,问自己这些问题很平常:应用通常都是基于用户故事构建的,并且你希望功能描述(和安全)是基于每个用户的。所以,对于我们而言,考虑应用安全的最自然方式就是基于当前用户。Shiro的API用它的Subject概念从根本上体现了这种思考方式。

Subject一词是一个安全术语,其基本意思是“当前的操作用户”。称之为“用户”并不准确,因为“用户”一词通常跟人相关。在安全领域,术语“Subject”可以是人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。但考虑到大多数目的和用途,你可以把它认为是Shiro的“用户”概念。在代码的任何地方,你都能轻易的获得Shiro Subject,参见如下代码:

获得Subject

import org.apache.shiro.subject.Subject;
import org.apache.shiro.SecurityUtils;
...
Subject currentUser = SecurityUtils.getSubject();

SecurityManager

Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。

那么,如何设置SecurityManager呢?嗯,这要看应用的环境。例如,Web应用通常会在Web.xml中指定一个Shiro Servlet Filter,这会创建SecurityManager实例,如果你运行的是一个独立应用,你需要用其他配置方式,但有很多配置选项。

Subject的会话

Session session = subject.getSession();
Session session = subject.getSession(boolean create); 会话的方法
Session session = subject.getSession();
session.getAttribute("key", someValue);
Date start = session.getStartTimestamp();
Date timestamp = session.getLastAccessTime();
session.setTimeout(millis); ... web.xml中的ShiroFilter
<filter>
<filter-name>ShiroFilter</filter-name>
<filter-class>
org.apache.shiro.web.servlet.IniShiroFilter
</filter-class>
<!-- 没有init-param属性就表示从classpath:shiro.ini装入INI配置 -->
</filter>
<filter-mapping>
<filter-name>ShiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
												

最新文章

  1. 解密FFmpeg播放track mode控制
  2. opencv 比较直方图方式 进行人脸检测对比
  3. yii2从零开始一,安装
  4. 树型hierarchyid类型
  5. 使用批处理(bat)脚本对目录树下同种性质的目录或文件进行处理
  6. Redis 读后小感
  7. MVC中的Controller
  8. C#借助谷歌翻译实现翻译小工具(二)添加托盘图标
  9. 开源软件项目管理系统招设计/开发。。。。。Zend Framework2架构 svn://735.ikwb.com/pms
  10. oracle----sqlldr用法
  11. J2EE事务
  12. 百度参投 Uber中国12亿美元融资已到账
  13. [HTTP2] HTTP1 probs and HTTP2 saves
  14. 【 POJ - 1204 Word Puzzles】(Trie+爆搜|AC自动机)
  15. Oracle中NVARCHAR2与VARCHAR2的差别
  16. iOS tableViewCell plane格式下,接近section边缘不显示分割线却被复用解决办法
  17. linux添加新硬盘并格式化
  18. 有N个数,组成的字符串,如012345,求出字串和取MOD3==0的子串,如012 12 123 45。
  19. PHP7.27: pdf
  20. Spark2.3(三十七):Stream join Stream(res文件每天更新一份)

热门文章

  1. JavaScript(四)操作符
  2. 记一个http-proxy-middleware 代理访问nginx映射的接口不通过的问题(connection close)
  3. 学Java必看,不看的人都后悔了
  4. ----------- Rootkit 核心技术之绕过 IopParseDevice() 调用源检测逻辑 ---------------
  5. bzoj:1221;vijos 1552 软件开发
  6. ES5.0集群搭建
  7. EMC题
  8. 【Git】Git基础操作
  9. python之hashlib、configparser、logging模块
  10. tp5 $_ENV获取不到数据