2021SC@SDUSC
Shiro项目综述
什么是Shiro?
Apache Shiro(读作“sheeroh”,即日语“城”)是一个开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
Shiro的前身是JSecurity。
2004年,Les Hazlewood和Jeremy Haile创办了Jsecurity。当时他们找不到适用于应用程序级别的合适Java安全框架,同时又对JAAS非常失望。2004年到2008年期间,JSecurity托管在SourceForge上,贡献者包括Peter Ledbrook、Alan Ditzel和Tim Veil。
2008年,JSecurity项目贡献给了Apache软件基金会(ASF),并被接纳成为Apache Incubator项目,由导师管理,目标是成为一个顶级Apache项目。期间,Jsecurity曾短暂更名为Ki(读作“Key”),随后因商标问题被社群更名为“Shiro”。
随后项目持续在Apache Incubator中孵化,并增加了贡献者Kalle Korhonen。2010年7月,Shiro社区发布了1.0版,随后社区创建了其项目管理委员会,并选举Les Hazlewood为主席。2010年9月22日,Shrio成为Apache软件基金会的顶级项目(TLP)。
https://zh.wikipedia.org/wiki/Apache_Shiro
概述
Apache Shiro 是一个多功能的 Java 安全框架。
该框架是高度可定制的和模块化的,因为它提供了身份验证、授权、加密和会话管理。
安装说明
- 确保您安装了 JDK 1.8+ 和 Maven 3.0.3+。
- 从下载页面下载最新的“Source Code Distribution” 。
- 解压源码包:
$ unzip shiro-root-1.8.0-source-release.zip
- 进入quickstart目录:
$ cd shiro-root-1.8.0/samples/quickstart
Run the QuickStart:
$ mvn compile exec:java
这个目标只会打印出一些日志消息让你知道发生了什么,然后退出。在阅读本快速入门时,请随时查看samples/quickstart/src/main/java/Quickstart.java.
更改该文件并mvn compile exec:java
根据需要经常运行上述命令。
使用说明
1. 依赖
Apache Shiro 有很多模块。但是,在此次源码分析中,我们主要对shiro-core版本进行分析,其他版本都是以shiro-core的基础上做出的延伸。
让我们将它添加到我们的pom.xml 中:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.4.0</version>
</dependency>
可以在 Maven Central上找到最新版本的 Apache Shiro 模块。
2. 配置安全管理器
安全管理器是 Apache Shiro框架的中心部分。一个应用程序通常只有一个安全管理器实例。
要配置框架,我们需要在资源文件夹中创建一个shiro.ini文件,内容如下:
[users]
user = password, admin
user2 = password2, editor
user3 = password3, author
[roles]
admin = *
editor = articles:*
author = articles:compose,articles:save
shiro.ini配置文件的[users]部分定义了SecurityManager识别的用户凭据。格式为:p rincipal(用户名)=密码,role1,role2,…
角色及其相关权限在[roles]部分中声明。该管理员角色被授予的权限和访问应用程序的每一个部分。这由通配符(*)表示。
在安全管理器用于配置SecurityUtils类。从SecurityUtils 中我们可以获取当前与系统交互的用户,并进行认证和授权操作。
让我们使用IniRealm从shiro.ini文件加载我们的用户和角色定义,然后使用它来配置DefaultSecurityManager对象:
IniRealm iniRealm = new IniRealm("classpath:shiro.ini");
SecurityManager securityManager = new DefaultSecurityManager(iniRealm);
SecurityUtils.setSecurityManager(securityManager);
Subject currentUser = SecurityUtils.getSubject();
现在,我们有一个安全管理器是敏感的用户凭据,并在定义的角色的shiro.ini文件,让我们继续以用户身份验证和授权。
组内分工
1. 唐子尧:shiro-core/org.apache.shiro.realm;
2. 米良:shiro-core/org.apache.shiro.mgt;
3. 郭东骞:shiro-core/org.apache.shiro.subject;