第二讲shiro异常及执行流程
在认证过程中,有一个父异常为:AuthenticationException
该异常有几个子类,分别对应不同的异常情况:
(1)DisabledAccountException:账户失效异常
(2)ExcessiveAttemptsException:尝试次数过多
(3)UnknownAccountException:用户不正确
(4)ExpiredCredentialsException:凭证过期异常
(5)IncorrectCredentialsException:凭证不正确
虽然shiro为每一种异常都提供了准确的异常类,但是在编写代码的过程中,应提示给用户的异常信息为模糊的,这样有助于安全。
常见的处理方式为:
UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "11121");
try {
// 6、进行用户身份验证
subject.login(token);
// 7、通过subject来判断用户是否通过验证
if (subject.isAuthenticated()) {
System.out.println("用户登录成功");
}
} catch (UnknownAccountException e) {// AuthenticationException为父异常 Ctrl+T看子异常
System.out.println("用户名或密码不正确");
} catch (IncorrectCredentialsException e) {
System.out.println("用户名或密码不正确");
}
执行流程:
(1)通过shiro的相关api,创建securityManager及获取Subject实例
// 1、创建SecurityManager工厂,读取相应的配置文件
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
// 2、通过SecurityManager工厂获取SecurityManager的实例
SecurityManager securityManager = factory.getInstance();
// 3、将securityManager对象设置到运行环境中
SecurityUtils.setSecurityManager(securityManager);
// 4、通过SecurityUtils获取主体Subject
Subject subject = SecurityUtils.getSubject();
(2)封装token信息
UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "1111");
(3)通过subject.login(token)进行用户认证
Subject接收token,通过其实现类DelegatingSubject将token委托给SecurityManager来完成认证。SecurityManager通过是接口通过DefaultSecurityManager来完成相关的功能。由DefaultSecurityManager中login来完成认证过程。在login中调用了该类authenticae()来完成认证。该方法是由AuthenticatiingSecurityManager来完成的。在该类的authenticate()中,通过调用authenticator(认证器)来完成认证工作。Authenticator是由其默认实现类ModularRealmAuthenticatior来完成认证。通过ModularRealmAuthenticatior中的doAuthenticate来获取Realms信息。如果是单realm直接将token和realm中的数据进行比较,判断是否认证成功。如果是多realm,那么需要通过Authentication Strategy来完成对应的认证工作。
(4)通过subject.isAuthenticated()来判断是否认证成功。
第二讲shiro异常及执行流程的更多相关文章
- 简单讲一下 SpringMVC的执行流程?
执行流程: 1. 用户向服务器发送请求,请求被 Spring 前端控制 Servelt DispatcherServlet 捕获(捕获) . DispatcherServlet对请求 URL进行解析 ...
- 第二天 ci执行流程
第二天 ci执行流程 welcome 页面 this this->load 单入口框架index.php 两个文件夹 system application定义 定义常亮路径 载入 codeign ...
- Android开发第一讲之目录结构和程序的执行流程
1.如何在eclipse当中,修改字体 下面的这种办法,可以更改xml的字体 窗口--首选项--常规--外观--颜色和字体--基本--文本字体--编辑Window --> Preferences ...
- Struts2第二篇【开发步骤、执行流程、struts.xml讲解、defalut-struts讲解】
前言 我们现在学习的是Struts2,其实Struts1和Struts2在技术上是没有很大的关联的.Struts2其实基于Web Work框架的,只不过它的推广没有Struts1好,因此就拿着Stru ...
- MySQL实战45讲学习笔记:日志系统(第二讲)
一.重要的日志模块:redo log 1.通过酒店掌柜记账思路刨析redo log工作原理 2.InnoDB 的 redo log 是固定大小的 只要赊账记录在了粉板上或写了账本上,之后即使掌柜忘记了 ...
- 追源索骥:透过源码看懂Flink核心框架的执行流程
li,ol.inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-bottom:20px}dt, ...
- Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程
在本系列的上一篇文章中,我们学习了Glide的基本用法,体验了这个图片加载框架的强大功能,以及它非常简便的API.还没有看过上一篇文章的朋友,建议先去阅读 Android图片加载框架最全解析(一),G ...
- WebApp 安全风险与防护课堂(第二讲)开课了!
本文由葡萄城技术团队于原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 在昨天的公开课中,由于参与的小伙伴们积极性和热情非常高,我们的讲师Carl ...
- 透过源码看懂Flink核心框架的执行流程
前言 Flink是大数据处理领域最近很火的一个开源的分布式.高性能的流式处理框架,其对数据的处理可以达到毫秒级别.本文以一个来自官网的WordCount例子为引,全面阐述flink的核心架构及执行流程 ...
随机推荐
- tomcat 启动一傘而过问题
tomcat 启动一傘而过问题 D:\apache-tomcat-7.0.75\bin startup.bat打开记事本打开 第一行:设置启动环境变量JAVA_HOME,CATALINA_HOME S ...
- UE4 质心相关
Add force 始终给质心施加力,即使手动偏移了质心(Center of mass)也不例外. Add force at location local 相对于物体的原始质心位置增加一个偏移值后的位 ...
- [design pattern](2) Observer
前言 在上一个博客中我们介绍了Strategy模式,它是行为型模式麾下的一员大将.那么本博客我们来学习一下行为型模式麾下的另一员大将Observer模式. 思考题 老套路,先来思考下面的问题: 问题: ...
- Java数据结构与算法(2):栈
栈是一种线性表,特点在于它只能在一个位置上进行插入和删除,该位置是表的末端,叫做栈的顶(top).因此栈是后进先出的(FIFO).栈的基本操作有push.peek.pop. 栈的示意图 进栈和出栈都只 ...
- VMware Workstation 14 Pro安装教程(详细)
VMware Workstation 14 Pro安装教程(详细) 话不多说,直接上图,需要的拿走. 下载地址:https://download3.vmware.com/software/wkst/f ...
- uva live 7635 National Bomb Defusing Squad
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- G-sensor概述及常用概念整理【转】
本文转载自:http://www.jianshu.com/p/d471958189a0?nomobile=yesG 本文对G-sensor进行整理,先介绍G-sensor的一些基本概念,再具体讲解BO ...
- ajax工作原理,Jsonp原理
Ajax工作原理是 相当于在用户和服务器之间加了-个中间层(AJAX引擎),使用户操作与服务器响应异步化. 对于用户请求ajax引擎会做一些数据验证和数据处理,不是所有请求都提交给服务器,当需要从服务 ...
- 用Vue来实现音乐播放器(六):JSONP的封装
在npm上下载jsonp的包 这个包的用法 传入的参数是地址加上地址参数的混合 但是想封装一个将地址和地址参数分别传入的jsonp方法 所以来封装一个 import originJSONP from ...
- 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第3节 两种获取Stream流的方式_11_练习:集合元素处理(Stream方式)