第二章----1,身份认证的基本流程,附上源码
2018-01-26 09:04
260 查看
先感谢涛哥写了这么好的文章,附上原文学习地址:涛哥的shiro教程
学习完孤傲苍狼和涛哥的博客,觉得分享知识是一种进步,原因很简单:能把别人教会了的博客,一定是好博客。我始终相信,写博客的受益者之一永远都有自己。
因为自己水平有限,推荐看完涛哥的博客后,再来看看我写的总结,对于博主来说,就已经心满意足了。
萌生写这个系列的博客的最初的目的有三个:
1.复习Shiro的相关知识,将其用于项目实战中。
2.将相关代码提交到GitHub上,作为学完廖雪峰Git教程的实战
3.第一次完整的练习写博客,写好博客,受益你我他。
也希望自己在不久的将来能成为像孤傲苍狼和涛哥一样的大神。
我的shiro源码地址,欢迎下载查看。
Subject:主体,用来与用户交互的对象。 比如认证用户信息, subject.login(用户信息), 。 再比如,判断用户是否有相关的角色 subject.hasRole("小学生");SecurityManager:安全中心,它相当于“用户信息”与“数据源”的中间者。 用户信息指用户在WEB页面上输入的数据,通常指 用户名,邮箱,密码,手机号等。 “数据源”指数据库中存放的数据,比如用户名表,手机号表,邮箱表。 SecurityManager的作用就是把“用户信息”拿去与“数据源”比对,看“用户信息”是不是存在于“数据源”中。
流程如下:
步骤一:Shiro把用户的数据封装成标识token,token一般封装着用户名,密码等信息。
步骤二:使用Subject代理获取到封装着用户的数据的标识token
步骤三:Subject把标识token交给SecurityManager,
然后SecurityManager把标识token委托给认证器Authenticator进行身份验证。
认证器的作用一般是用来指定如何验证,它能规定哪些是数据源。
步骤四:认证器把标识token传入Realm,Realm就是上述的“数据源”。
步骤五:数据源Realm接收到认证器Authenticator的标识token,一般查询数据库进行验证。
@Test
public void test1() {
//加载配置文件,并获取工厂,这个SecurityManager小心与java.lang包下的SecurityManager冲突
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro_1.ini");
//获取安全管理者实例
org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
//将安全管理者放入全局对象
SecurityUtils.setSecurityManager(sm);
//全局对象通过安全管理者生成Subject对象
Subject subject = SecurityUtils.getSubject();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken("jay", "123");
//将用户的数据token 最终传递到Realm中进行对比
subject.login(token);
//判断本帐号是否已经被认证
Assert.assertEquals(true, subject.isAuthenticated());
}
}shiro_1.ini配置文件内容如下,它就是数据源Realm。以后的章节数据源Realm将是JdbcRealm,数据将会被存放到数据库中。[users]
jay=123
学习完孤傲苍狼和涛哥的博客,觉得分享知识是一种进步,原因很简单:能把别人教会了的博客,一定是好博客。我始终相信,写博客的受益者之一永远都有自己。
因为自己水平有限,推荐看完涛哥的博客后,再来看看我写的总结,对于博主来说,就已经心满意足了。
萌生写这个系列的博客的最初的目的有三个:
1.复习Shiro的相关知识,将其用于项目实战中。
2.将相关代码提交到GitHub上,作为学完廖雪峰Git教程的实战
3.第一次完整的练习写博客,写好博客,受益你我他。
也希望自己在不久的将来能成为像孤傲苍狼和涛哥一样的大神。
我的shiro源码地址,欢迎下载查看。
一、基本流程
流程如下:
步骤一:Shiro把用户的数据封装成标识token,token一般封装着用户名,密码等信息。
步骤二:使用Subject代理获取到封装着用户的数据的标识token
步骤三:Subject把标识token交给SecurityManager,
然后SecurityManager把标识token委托给认证器Authenticator进行身份验证。
认证器的作用一般是用来指定如何验证,它能规定哪些是数据源。
步骤四:认证器把标识token传入Realm,Realm就是上述的“数据源”。
步骤五:数据源Realm接收到认证器Authenticator的标识token,一般查询数据库进行验证。
二、验证代码
public class MyFirstTest {@Test
public void test1() {
//加载配置文件,并获取工厂,这个SecurityManager小心与java.lang包下的SecurityManager冲突
Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro_1.ini");
//获取安全管理者实例
org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();
//将安全管理者放入全局对象
SecurityUtils.setSecurityManager(sm);
//全局对象通过安全管理者生成Subject对象
Subject subject = SecurityUtils.getSubject();
//封装用户的数据
UsernamePasswordToken token = new UsernamePasswordToken("jay", "123");
//将用户的数据token 最终传递到Realm中进行对比
subject.login(token);
//判断本帐号是否已经被认证
Assert.assertEquals(true, subject.isAuthenticated());
}
}shiro_1.ini配置文件内容如下,它就是数据源Realm。以后的章节数据源Realm将是JdbcRealm,数据将会被存放到数据库中。[users]
jay=123
相关文章推荐
- MaNGOS-Zero源码学习之realmd认证登录服务器(一):认证登录基本流程
- 源码-PL/SQL从入门到精通-第二章-PL/SQL基本概念-Part 1
- Google test源码阅读(一):基本执行流程
- 【SSH进阶之路】深入源码,详解Struts基本实现流程(七)
- django Rest Framework----认证/访问权限控制/访问频率限制 执行流程 Authentication/Permissions/Throttling 源码分析
- quartz 2.2.x 源码学习 基本执行流程分析
- Net Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程
- Shiro身份认证流程,securityManager源码解析
- 完整的数据加密及身份认证流程
- Soap身份基本认证方法
- shiro认证授权流程源码分析
- Fresco源码赏析 之 基本流程
- ASP.Net 身份验证方法 基本的Forms认证步骤 [转]
- SSH与SSM学习之Struts210——Struts2基本流程(源码)
- ASP.Net 身份验证方法 基本的Forms认证步骤
- 源码分析shiro认证授权流程
- RxJava && Agera 从源码简要分析基本调用流程(2)
- RxJava基本流程和lift源码分析
- x264源码分析与应用示例(一)——视频编码基本流程
- Django REST framework之认证权限流程源码分析