Shiro学习笔记总结,附加" 身份认证 "源码案例(一)
Shiro学习笔记总结
内容介绍:
一、Shiro介绍
二、subject认证主体
三、身份认证流程
四、Realm & JDBC reaml介绍
五、Shiro.ini配置介绍
六、源码案例 ,链接数据库测试
Apache Shiro™是一个功能强大且易于使用的Java安全框架,可执行身份验证,授权,加密和会话管理。使用Shiro易于理解的API,您可以快速,轻松地确保任何应用程序 - 从最小的移 动应用程序到最大的Web和企业应用程序。
一、subject认证主体
subject:认证主体包含两个信息:
principals:身份,可以是用户名,邮件,手机号邓,用来标志一个登入主体身份
Cresentials:凭证,常见有密码,数字证书等
二、身份认证流程

Step1:应用程序代码在调用Subject.login(token)方法后,传入代表最终用户的身份和凭证构造的AuthenticationToken实例token。
Step2:将Subject实例委托给应用程序的SecurityManager(Shiro的安全管理)通过调用securityManager.login(token)来开始实际的认证工作。这里开始真正的认证工了。
Step3,4,5:然后SecurityManager就会根据具体的reaml去进行安全认证了。
这个realm到底是啥呢?realm就是一个域,Shiro就是从realm中获取验证数据的,也就是我们写在.ini文件中的东西,当然了,这个realm有很多种,如text realm、jdbc realm、jndi realm等,text realm比较简单,这一节主要总结一下jdbc realm的使用,text realm也会提到。
三、Realm & JDBC reaml
Realm 意思是域,shiro从Realm 中获取验证数据
Realm 很多种类,常见有jdbc Realm ,jndi Realm ,text Realm
Shiro默认提供的Reaml说明:
关于说明是Reaml看前面的说明,Shiro默认提供的Reaml说明如下:
一般继承AuthorizingRealm(授权)即可;其继承了AuthenticatingRealm(即身份验证),而且也间接继承了CachingRealm(带有缓存实现)。其中主要默认实现如下:
org.apache.shiro.realm.text.IniRealm:[users]部分指定用户名/密码及其角色;[roles]部分指定角色即权限信息;
org.apache.shiro.realm.text.PropertiesRealm: user.username=password,role1,role2指定用户名/密码及其角色;role.role1=permission1,permission2指定角色及权限信息;
org.apache.shiro.realm.jdbc.JdbcRealm:通过sql查询相应的信息,如“select password from users where username = ?”获取用户密码,“select password, password_salt from users where username = ?”获取用户密码及盐;“select role_name from user_roles where username = ?”获取用户角色;“select permission from roles_permissions where role_name = ?”获取 角对应的权限信息;也可以调用相应的api进行自定义sql;
INI配置文件介绍
INI配置文件是一种key/value的键值对配置,提供了分类的概念,每一个类中的key不可重复;
#号代表注释,shiro.ini文件默认在/WEB-INF/ 或classpath下,shiro会自动查找;
INI配置文件一般适用于用户少且不需要在运行时动态创建的情景下使用。
1.在web.xml中配置shiro的过滤器
要使用Shiro必须在web.xml中配置shiro,在web.xml 中自定义shiro.ini位置(默认位置)/WEB-INF/shiro.ini or classpath:shiro.ini, 加入以下内容:
<filter-name>ShiroFilter</filter-name>
<filter-class>org.apache.shiro.web.servlet.IniShiroFilter</filter-class>
<init-param>
<param-name>configPath</param-name>
<param-value>/WEB-INF/shiro.ini</param-value>
</init-param>
</filter>
2. shiro.ini简单示例(ini配置中主要配置有四大类:main,users,roles,urls,这儿先介绍下main,其他三个后面介绍)
[main]
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
#数据库驱动
dataSource.driverClass=com.mysql.jdbc.Driver
#数据库名
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/shiro
#数据库登入名 其中user是包里的固定写法
dataSource.user=root
#数据库密码
dataSource.password=123456
#设置数据源
jdbcRealm.dataSource=$dataSource
securityManager.realms=$jdbcRealm
源码案例 ,链接数据库测试
整体结构如下图:

先导入jar包,我用的是maven环境,看详情:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.java123.shiro</groupId>
<artifactId>Shior001</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Shiro001</name>
<build/>
<!-- 自动下载jar配置到本地仓库 maven Dependcies -->
<dependencies>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.2.4</version>
</dependency>
<!-- 下载jar包 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency> <!-- 下载同上 -->
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency> <dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency> <dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency> <!-- mysql的驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency> </dependencies>
</project>
之后会自动生成jar包文件

然后编写shiro.xm配置文件,代码参见shior.xml文件详解,再引入log4g文件,以便查看信息
最后写一个测试类,查看折叠代码
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory; public class JdbcRealm { public static void main(String[] args) { //读取配置文件,初始化工厂
Factory<SecurityManager> factory=new IniSecurityManagerFactory("classpath:jdbc_realm.ini"); //获取SecurityManager实例
SecurityManager secManager=factory.getInstance(); //把secManager绑定到SecurityUtils中
SecurityUtils.setSecurityManager(secManager);; //得到当前执行的用户
Subject subject=SecurityUtils.getSubject(); //创建token令牌,用户名和密码
//其中"java1234","123456"是写死的,与shiro.ini里面的一致
UsernamePasswordToken token=new UsernamePasswordToken("java1234","123456"); try {
subject.login(token); //身份异常处理
System.out.println("身份登入成功");
} catch (AuthenticationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("身份登入失败");
}
//Assert.assertEquals(true, subject.isAuthenticated()); //断言用户已经登录
//退出
subject.logout();
}
}
最后看看运行结果:

自学到这,分享出来。希望对入门的朋友也有用,技术交流,欢迎添加(QQ:1030570138)
后续...
Shiro学习笔记总结,附加" 身份认证 "源码案例(一)的更多相关文章
- [shiro学习笔记]第四节 使用源码生成Shiro的CHM格式的API文档
版本号为1.2.3的shiro API chm个事故文档生成. 获取shiro源码 编译生成API文档 转换成chm格式 API 获取shiro源码 shiro官网: http://shiro.apa ...
- Django:学习笔记(9)——用户身份认证
Django:学习笔记(9)——用户身份认证 User
- 机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理、源码解析及测试
机器学习实战(Machine Learning in Action)学习笔记————03.决策树原理.源码解析及测试 关键字:决策树.python.源码解析.测试作者:米仓山下时间:2018-10-2 ...
- Kali学习笔记30:身份认证与命令执行漏洞
文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 实验环境: Kali机器:192.168.163.13 ...
- 并发编程学习笔记(七、Thread源码分析)
目录: 常见属性 构造函数 start() run() 常见属性: /** * 线程名称 */ private volatile String name; /** * 线程优先级 */ private ...
- Android学习笔记_48_若水新闻客户端源码剖析
一.新闻客户端布局代码 1.1 主界面布局 使用GridView实现左右可滑动菜单项,使用标签HorizontalScrollView实现水平滚动条,将创建的GridView添加到布局文件中. < ...
- shiro学习笔记_0200_认证
认证,身份验证,验证用户是否合法 在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身份: principals:用户的身份信息 ...
- shiro学习笔记_0600_自定义realm实现授权
博客shiro学习笔记_0400_自定义Realm实现身份认证 介绍了认证,这里介绍授权. 1,仅仅通过配置文件来指定权限不够灵活且不方便.在实际的应用中大多数情况下都是将用户信息,角色信息,权限信息 ...
- Shiro 登录认证源码详解
Shiro 登录认证源码详解 Apache Shiro 是一个强大且灵活的 Java 开源安全框架,拥有登录认证.授权管理.企业级会话管理和加密等功能,相比 Spring Security 来说要更加 ...
随机推荐
- 009-centos6.6 用户以及组操作
1.查看用户所属组 id admin uid=500(admin) gid=500(admin) 组=500(admin) 2.查看用户信息 用户列表文件:cat /etc/passwd 查看系统中有 ...
- 手写web框架之加载配置项目
一 定义框架配置项 在项目的src/main/resources目录下创建一个名为smart.propertiesd的文件,文件的内容如下: smart.framework.jdbc.driver= ...
- nginx配置静态资源关闭访问日志
location ~ .*\.(css|js|gif|png|jpg|jpeg|bmp|swf)$ { root $root_path; access_log off; }
- Golang gRPC微服务01: 介绍
gRPC 是什么 gRPC是goole开源的一个RPC框架和库,支持多语言之间的通信.底层通信采用的是 HTTP2 协议.gRPC在设计上使用了 ProtoBuf 这种接口描述语言.这种IDL语言可以 ...
- 了解DrawCall
一.什么是DrawCall DrawCall的含义就是CPU调用图像编程接口,以命令GPU进行渲染的操作. CPU和GPU通过使用一个命令缓冲区实现并行工作.命令缓冲区包含一个命令队列,CPU向其中添 ...
- 【AMAD】django-oauth2-provider -- 为你的app提供Oauth2的访问
简介 个人评分 简介 django-oauth2-provider1主要是为django集成oauth2加入了不少的工具,比如装饰器,Base View, Authentication Backend ...
- 《JAVA语言》课问题汇总
一.阅读相应教材,或者使用互联网搜索引擎,弄清楚反码.补码跟原码这几个概念,然后编写示例程序,对正数.负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示 ...
- NDK学习笔记-JNI开发流程
JNI(Java Native Interface)Java本地化接口,Java调用C/C++,C/C++调用Java的一套API接口 实现步骤 在Java源文件中编写native方法 public ...
- TP5之事务处理
事务: 执行完A事件然后执行B事件,AB事件都执行完才算完成.可是有时候由于某些因素,A事件执行完,还没来得及执行B事件.怎么办?就需要回到A事件执行前.这种事情多见于电商支付功能. mysql事务要 ...
- java实验题目
1. 打印输出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个“水仙花数”. 实验源码: public class number1 { publi ...