如果让我们自己实现用户登录验证我们都需要哪些步骤?

很简单,根据用户提供的账号从数据库中查询该账户的密码以及一些其他信息,然后拿这个密码与用户输入的密码相比较,因为保存在数据库中的密码一般是经过加密的,所以必须使用同样的加密方式先加密用户输入的密码,拿着加密后的字符串跟数据库中的密码比较,如果相同则登录成功。登录成功后查询账户的角色,根据角色赋予账户操作权限。

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验证过程的更多相关文章

  1. Apache Shiro 认证过程

    3.1.1    示例 Shiro验证Subjects 的过程中,可以分解成三个不同的步骤: 1. 收集Subjects 提交的Principals(身份)和Credentials(凭证): 2. 提 ...

  2. [转]在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效

    该文原网址:http://www.cnblogs.com/xwgli/p/5487930.html 在 .NET 中远程请求 https 内容时,发生错误:根据验证过程,远程证书无效.   当访问 h ...

  3. C#发送邮件异常:根据验证过程,远程证书无效

    今天在做发送邮件功能时,开始用qq邮箱和163邮箱都可以正常发送,后再改用我公司的邮箱和smtp时竟然报错了. 异常提示-----"根据验证过程,远程证书无效",后来通过查询资料解 ...

  4. 架构验证过程发现非数据类型错误 validation found non-data type errors

    问题: infopath报一下错误 validation found non-data type errors 架构验证过程发现非数据类型错误 原因: 重复表字段在后台代码里要一一对应,否则报错. 错 ...

  5. Kerberos验证过程

    参考文献: How the Kerberos Version 5 Authentication Protocol Works: Logon and Authentication SQL Kerbero ...

  6. Spring Security 入门(3-11)Spring Security 的登录密码验证过程 UsernamePasswordAuthenticationFilter

    认证过程如下 一.先判断请求(请求必须是post请求)地址是否为配置的 login-processing-url 值(默认/j_spring_security_check),如果不是,则放行,进入下一 ...

  7. XmlDocument.Load(url) url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。" "根据验证过程,远程证书无效。"

    XmlDocument.Load(url)  url是https远程时,报错" 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系."   "根据验证过程, ...

  8. C#发送邮件异常:根据验证过程,远程证书无效,何解???

    /// <summary> /// 发送邮件 /// </summary> /// <param name="mailSubjct">邮件主题& ...

  9. System.Security.Authentication.AuthenticationException:根据验证过程,远程证书无效。

    好久没写博客了,今天突然遇到个神奇的问题. 做好的网站在win10上和Windows sever 2012 上都没有问题,搬到Windows sever 2003上就出现了这么一个错误: Server ...

随机推荐

  1. Spring 上下文操作工具类 ContextUtils

    ContextUtils.java package com.java.config; import org.springframework.beans.BeansException; import o ...

  2. Spring使用Setter依赖注入

    一个简单的Spring例子来展示如何通过setter方法注入依赖项,最常用DI方法注入bean. 1. IOutputGenerator 接口和实现类   package faj.test.javad ...

  3. iOS第三方开放者平台概览

    前言:记录一些可能用到过的第三方开放者平台相关内容 视频类: 腾讯云移动直播:https://cloud.tencent.com/product/mlvb 遇到问题后发起工单是一种比较好的解决问题的方 ...

  4. Rxjava+retrofit+mvp整合

    转载请标明出处: http://blog.csdn.net/forezp/article/details/52621898 本文出自方志朋的博客 最近在看Rxjava,写了一个简单的 demo整合了R ...

  5. 实际案例告诉你为什么Oracle不建议使用varchar2来存时间数据

    问题现象2015年9月客户系统中一条高逻辑读的SQL语句,在业务高峰期执行频率较高,导致系统逻辑读居高不下,同时带高了系统CPU,SQL语句主体部分如下 SELECT /* ^^*/ COUNT(DI ...

  6. windows tensorflow 简单安装

    需要64位系统windows, 下载64位的python3.5 官网下载地址:https://www.python.org/downloads/release/python-352/ 百度云下载地址: ...

  7. jquery ajax参数

    //默认请求参数 var _options = { url: null, // 请求连接地址 type: 'GET', // 请求类型(get,post) data: null, // post时请求 ...

  8. C#基础-面向对象-继承

    继承 新建一个基类 对Person类3个字段进行重构->封装字段 效果如下: public string Name { get => name; set => name = valu ...

  9. linux环境下安装 openOffice 并启动服务

    一.背景故事 这两天遇到一个大坑,客户要做office 文档在线预览功能,于是乎就要把office文档转换成pdf交给前端显示.      在某度找了一圈都说openOffice+jodconvert ...

  10. 转:Java后端面试自我学习

    引自:https://www.cnblogs.com/JavaArchitect/p/10011253.html 最近面试java后端开发的感受:如果就以平时项目经验来面试,通过估计很难——再论面试前 ...