简述Shiro验证过程
如果让我们自己实现用户登录验证我们都需要哪些步骤?
很简单,根据用户提供的账号从数据库中查询该账户的密码以及一些其他信息,然后拿这个密码与用户输入的密码相比较,因为保存在数据库中的密码一般是经过加密的,所以必须使用同样的加密方式先加密用户输入的密码,拿着加密后的字符串跟数据库中的密码比较,如果相同则登录成功。登录成功后查询账户的角色,根据角色赋予账户操作权限。
Shiro的登录验证思路跟上面一样。只不过shiro为了更通用更灵活,把上面提到的过程与信息做了很多封装,并暴露了一些简单的API供大家使用。
比如,用户输入的账户与密码封装为UsernamePasswordToken对象,登录过程封装为subject.login(token)方法。
正如上面提到的,登录时有个根据账户从数据库获取密码的过程,而这个过程在不同的系统中有不同的实现方式,有的系统通过查询数据库,有的系统可能是通过查询文件,什么样的都有,所以这个地方shiro用抽象类(AuthorizingRealm)的方式预留出来让大家去各自实现,当然,shiro也提供了几个常用的实现,如JdbcRealm.
在AuthorizingRealm类的doGetAuthenticationInfo(…)方法中用户可以根据账户查账户信息,并且把查询到的信息封装成为SimpleAuthenticationInfo对象返回。
现在我们已经有了两个对象:使用用户输入信息封装的UsernamePasswordToken与从数据库查询到的SimpleAuthenticationInfo,下一步就要比较两个对象中的密码是否相同了。
UsernamePasswordToken中的密码是明文,SimpleAuthenticationInfo中的密码是加密后的,如何比较?这个时候AuthorizingRealm 类中的credentialsMatcher对象就派上用场了,让我们看看源码中关于credentialsMatcher的说明:

credentialsMatcher的doCredentialsMatch(AuthenticationToken token, AuthenticationInfo info) 方法专门用来比较用户提供的凭证(也就是密码)与已保存的凭证是否匹配,但在比较之前credentialsMatcher必须先把用户提供的密码进行加密,那用哪种加密办法呢?肯定要跟保存密码时使用的加密方式一致啊,假设我们保存密码时用的是SHA-1,那要怎么告诉credentialsMatcher要用SHA-1加密呢?credentialsMatcher三四个实现类可供选择,这里我们可选择HashedCredentialsMatcher这个实现类并通过setHashAlgorithmName()方法指定加密方式如 md5 、SHA-1...
登录成功后就应该给账户授予角色与权限了,重写AuthorizingRealm类的doGetAuthorizationInfo方法即可:构造一个AuthorizationInfo具体实现(如SimpleAuthorizationInfo)的实例,并调用下面两方法为此实例设置角色与permission,最后返回此实例即可。
simpleAuthorInfo.addRoles(roleList);
simpleAuthorInfo.addStringPermissions(permissionList);
简述Shiro验证过程的更多相关文章
- Apache Shiro 认证过程
3.1.1 示例 Shiro验证Subjects 的过程中,可以分解成三个不同的步骤: 1. 收集Subjects 提交的Principals(身份)和Credentials(凭证): 2. 提 ...
- [转]在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效
该文原网址:http://www.cnblogs.com/xwgli/p/5487930.html 在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效. 当访问 h ...
- C#发送邮件异常:根据验证过程,远程证书无效
今天在做发送邮件功能时,开始用qq邮箱和163邮箱都可以正常发送,后再改用我公司的邮箱和smtp时竟然报错了. 异常提示-----"根据验证过程,远程证书无效",后来通过查询资料解 ...
- 架构验证过程发现非数据类型错误 validation found non-data type errors
问题: infopath报一下错误 validation found non-data type errors 架构验证过程发现非数据类型错误 原因: 重复表字段在后台代码里要一一对应,否则报错. 错 ...
- Kerberos验证过程
参考文献: How the Kerberos Version 5 Authentication Protocol Works: Logon and Authentication SQL Kerbero ...
- Spring Security 入门(3-11)Spring Security 的登录密码验证过程 UsernamePasswordAuthenticationFilter
认证过程如下 一.先判断请求(请求必须是post请求)地址是否为配置的 login-processing-url 值(默认/j_spring_security_check),如果不是,则放行,进入下一 ...
- XmlDocument.Load(url) url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。" "根据验证过程,远程证书无效。"
XmlDocument.Load(url) url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系." "根据验证过程, ...
- C#发送邮件异常:根据验证过程,远程证书无效,何解???
/// <summary> /// 发送邮件 /// </summary> /// <param name="mailSubjct">邮件主题& ...
- System.Security.Authentication.AuthenticationException:根据验证过程,远程证书无效。
好久没写博客了,今天突然遇到个神奇的问题. 做好的网站在win10上和Windows sever 2012 上都没有问题,搬到Windows sever 2003上就出现了这么一个错误: Server ...
随机推荐
- 【Java】常用数据类型转换(BigDecimal、包装类、日期等)
新工作转到大数据方向,每天都要面对数据类型互相转换的工作,再加上先前面试发现这部分的知识盲点, 决定复习之余自己再写一套便捷的方法,以后会比较方便.(虽然公司有现成封装的类,里头还有些遗漏的地方,暂时 ...
- html css javascript 知识点总结 bom js 操作标签 文本 节点 表格各行变色 悬停变色 省市联动 正则
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- C# 委托知识总结【转】
1.什么是委托,为什么要使用委托 我正在埋头苦写程序,突然想喝水,但是又不想自己去掉杯水而打断自己的思路,于是我就想让女朋友去给我倒水.她去给我倒水,首先我得让她知道我想让她干什么,通知她之后我可以继 ...
- 将 cmd 中命令输出内容保存为 TXT 文本文件
如果执行的命令输出内容较多,那么 cmd 控制台将会自动清除前面的内容,那么如何将屏幕的所有内容导出到文本文件? 下面给出简单的演示例子 ping百度,不会自动结束,按 Ctrl+C 强制结束,pin ...
- 【jQuery】阶段(插入、复制、替换、删除)
<p>你好!</p> 你最喜欢的水果是? <ul> <li title="苹果">苹果</li> <li titl ...
- 【TP5.1】HTML标签自动转义,导致CKEditor保存内容无法正常显示!
问题:使用Thinkphp5.1 开发的时候显示CKEditor保存的内容不符合预期. 希望的样子,肯定是不显示<p><b>等标签,而是下面的样子. 因为刚开始使用TP5.1和 ...
- PHP 输出控制
一.前言 说到PHP输出控制, 在很多框架里面,比如说TP,Yii和Laraval的模版引擎里面都有输出控制函数的阴影,输出控制也叫输出缓冲,说到它的作用有以下几点. 二.内容 1. 输出模版 $va ...
- 图解HTTP总结(5)——与HTTP协作的Web服务器
一台 Web 服务器可搭建多个独立域名的 Web 网站, 也可作为通信路径上的中转服务器提升传输效率. 用单台虚拟主机实现多个域名 HTTP/1.1 规范允许一台 HTTP 服务器搭建多个 Web 站 ...
- 裸机——210SD卡启动
1.通过阅读iROM_Application_note可以获取关于启动的全部信息 2.记录下代码 制作SD卡启动的代码,即添加校验和的 #include <strings.h> #incl ...
- Ball CodeForces - 12D
传送门 N ladies attend the ball in the King's palace. Every lady can be described with three values: be ...