简述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 ...
随机推荐
- web的攻击技术
简单的http协议本身并不存在安全性问题,因此技术本身几乎不会成为攻击的对象,应用http协议的服务器和客户端,以及运行在服务器端web应用等资源才是攻击目标,那么怎么攻击,来源于哪里呢 web应用攻 ...
- P2341 [HAOI2006]受欢迎的牛
P2341 [HAOI2006]受欢迎的牛 塔尔羊标准模板(我才不会告诉你我嘴里含着一个九省联考的出题人) 不会劈配.林克卡特树.制胡窜 我还会叉粪宿主,梳妆素组,西安段素 #include<c ...
- scrapy install
csf@ubuntu:~$ sudo apt install python-scrapy
- C#中的委托是什么?事件是不是一种委托?
C#中的委托是什么? 委托可以把一个方法作为参数代入另一个方法. 委托可以理解为指向一个函数的引用. 事件是不是一种委托?事件是一种特殊的委托.
- TSMessages,非HUD风格的iOS提示框(附官方demo BUG修复方案)
优势 先看效果 个人觉得这种提示效果用在UITableView上要比HUD优雅美观,而其他情况下的提示,用HUD比较好 源码简介易懂,用起来也很方便 导入 pod导入相对很简单,主要讲怎么手动导入这个 ...
- 键盘遮挡控件(textfield/textview.......)
采用的是通知的常规方式 // 解决键盘遮挡问题//选择didShow是因为需要键盘的高度//选择willHide是因为视图frame重置需要优先于键盘消失,否则表现得不连贯 [[NSNotificat ...
- react中实现原生enter/回车事件及antdesign组件实现方式
先直接上核心代码: this.goToHomePage换成自己逻辑 自己写的时候直接把this.goToHmoPage()换成自己的逻辑就行了,还有注意一点的是: 需要传个空函数,不然会报错 在com ...
- HDU.2561 第二小整数(water)
题目来源:2561 题意分析:找出一堆数中第二小的整数,和题目说的一样 我的思路:冒泡或者sort()一下就ok了,但是我因为没看到多个测试用例还是吃了几记WA . ┭┮﹏┭┮ 完整代码: #incl ...
- C++使用GDI+实现图片格式转换
主要是我在设置壁纸时遇到的个小问题,因为设置壁纸只能是bmp格式的图片,不可能我喜欢的壁纸就都是bmp格式的,就想怎么转换一下图片的格式,于是就在百度搜怎么弄,搜到了可行方法,却没有实现代码,有些看起 ...
- 【赛时总结】 ◇赛时·IV◇ CODE FESTIVAL 2017 Final
◇赛时-IV◇ CODE FESTIVAL 2017 Final □唠叨□ ①--浓浓的 Festival 气氛 ②看到这个比赛比较特别,我就看了一看--看到粉粉的界面突然开心,所以就做了一下 `(* ...