frame shiro 认证示例及原理简述
shiro 认证流程

1、创建一个 javaSE 的maven项目(quickstart),并添加依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-core</artifactId>
<version>1.3.2</version>
</dependency>
2、添加shiro.ini配置文件
添加shiro.ini配置文件的方式是为了简单展示shiro的用法
在resources目录创建一个文件,文件名为shiro.ini
文件添加内容如下:
[users]
# 模拟数据库用户列表:账号=密码
zhangsan=666
lisi=888
3、测试类代码
package com.test.shiro; import org.apache.shiro.SecurityUtils;
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;
import org.junit.Test; public class ShiroTest {
@Test
public void testLogin() {
// 加载配置文件,创建SecurityManager 工厂对象
Factory<SecurityManager> securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 通过工厂对象,创建 SecurityManager 对象
SecurityManager securityManager = securityManagerFactory.getInstance();
// 将securityManager绑定到当前运行环境中:让系统可以随时随地访问securityManager对象
SecurityUtils.setSecurityManager(securityManager); // 创建登陆主体,此时主体还没有经过认证
Subject subject = SecurityUtils.getSubject();
// 创建主体登陆的身份/凭证,即账号/密码
UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "666");
// 主体登陆
subject.login(token); // 判断登陆是否成功
System.out.println("登陆是否成功:" + subject.isAuthenticated());
// 主体登出
subject.logout();
// 判断登陆是否成功
System.out.println("登陆是否成功:" + subject.isAuthenticated());
}
}
4、异常捕获
用户名不存在异常:
org.apache.shiro.authc.UnknownAccountException: Realm [org.apache.shiro.realm.text.IniRealm@6f79caec] was unable to find account data for the submitted AuthenticationToken [org.apache.shiro.authc.UsernamePasswordToken - zhangsan1, rememberMe=false].
凭证(密码)错误异常:
org.apache.shiro.authc.IncorrectCredentialsException: Submitted credentials for token [org.apache.shiro.authc.UsernamePasswordToken - zhangsan, rememberMe=false] did not match the expected credentials.
5、底层认证原理
调用subject.login方法进行登录,其会自动委托给securityManager.login方法进行登录;securityManager通过Authenticator进行认证;Authenticator的实现ModularRealmAuthenticator调用realm从ini配置文件取用户真实的账号和密码,这里使用的是IniRealm(shiro自带,相当于数据源);4、IniRealm先根据token中的账号去ini中找该账号,如果找不到则给ModularRealmAuthenticator返回null,如果找到则匹配密码,匹配密码成功则认证通过。
a、页面将用户名密码封装为token并传入后台;
b、subject调用login方法,传入参数token,以委托SecurityManager去认证
c、启动程序时SecurityManager就已经加载了shiro.ini文件内容;SecurityManager调用自己的login方法,传入参数token、realm,以委托authenticator(认证器)去执行具体的认证
d、authenticator执行认证
frame shiro 认证示例及原理简述的更多相关文章
- ButterKnife的原理简述
ButterKnife的原理简述 注解处理器Java5 中叫APT(Annotation Processing Tool),在Java6开始,规范化为 Pluggable Annotation Pro ...
- Apache Shiro 使用手册(二)Shiro 认证
认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的"实体/凭证"组合便是&quo ...
- Apache Shiro 认证过程
3.1.1 示例 Shiro验证Subjects 的过程中,可以分解成三个不同的步骤: 1. 收集Subjects 提交的Principals(身份)和Credentials(凭证): 2. 提 ...
- 将 Shiro 作为应用的权限基础 二:shiro 认证
认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一. ...
- Apache Shiro 使用手册(二)Shiro 认证(转发:http://kdboy.iteye.com/blog/1154652)
认证就是验证用户身份的过程.在认证过程中,用户需要提交实体信息(Principals)和凭据信息(Credentials)以检验用户是否合法.最常见的“实体/凭证”组合便是“用户名/密码”组合. 一. ...
- TCP/IP协议工作原理简述
TCP/IP协议工作原理简述 // */ // ]]> TCP/IP协议工作原理简述 Table of Contents 1 概要 2 应用层 3 传输层 4 网络层 5 链路层 1 概要 ...
- pureMVC简单示例及其原理讲解五(Facade)
本节将讲述Facade,Proxy.Mediator.Command的统一管家.自定义Facade必须继承Facade,在本示例中自定义Facade名称为ApplicationFacade,这个名称也 ...
- pureMVC简单示例及其原理讲解四(Controller层)
本节将讲述pureMVC示例中的Controller层. Controller层有以下文件组成: AddUserCommand.as DeleteUserCommand.as ModelPrepCom ...
- pureMVC简单示例及其原理讲解三(View层)
本篇说的是View层,即视图层,在本示例中包括两个部分:MXML文件,即可视控件:Mediator. 可视控件 可视控件由UserForm.mxml(图1)和UserList.mxml(图2)两个文件 ...
随机推荐
- Oracle 数据库维护管理之--dbms_lock
1.查询相关的v$视图,但是提示表或视图不存在解决办法 原因是使用的用户没有相关的查询权限导致 解决办法: grant select any dictionary to 用户; --这 ...
- Ubuntu之tar与curl操作
1,压缩备份: tar cfvj /tmp/test.tar.bz2 /tmp/test tar cfvz /tmp/test.tar.gz /tmp/test tar xfvj /tmp/tes ...
- Servlet基础知识点
一.web.xml 的加载顺序是: ServletContext-> context-param ->listener -> filter -> servlet,而同个类型之间 ...
- php 页面 不显示任何错误提示
error_reporting(0); ini_set('html_errors',false); ini_set('display_errors',false);
- sql 保留两位小数
select convert(decimal(18,2),1800.2669)
- ubuntu新建用户不能使用ll等指令,显示出来的信息没有颜色区分的解决方案
ubuntu利用 useradd -m test -g admin 指令,创建用户test及其工作目录.但是登陆后,会出现不能使用很多指令“比如:ll.显示的信息没有颜色”等等此时 查看该用户的 ...
- 转载《浅析MVC框架中View层的优雅设计及实例》
在基于B/S的应用程序开发中,从基本的技术分工上来说就是两大块,一是软件显示界面,另一个是程序逻辑.在N年前的脚本语言时代,无论是asp.php还是jsp,我们基本是都是把这两者柔和在一起的.尽管我们 ...
- [PKUWC 2018]随机算法
Description 题库链接 给定一张有 \(n\) 个点 \(m\) 条边的无向图,生成 \(1\sim n\) 的全排列,假设一个排列是 \(p\) , \(S\) 是当前最大独立集:如果 \ ...
- const 指针
使用指针时要涉及两个目标,即指针本身和指针所指的对象.关于const指针变量,可归结为以下三种: 1.指向常量的指针变量: 2.常指针变量: 3.指向常量的常指针变量. 一.指向常量的指针变量:声明格 ...
- SQL Server中使用表值函数
函数有很多限制,不能使用动态语句,不能使用临时表等等...细看一下,直接写语句就行了,不用动态语句 insert into @re select id,parid,@I from videoclass ...