shiro身份验证:

  参考链接:http://jinnianshilongnian.iteye.com/blog/2019547

  即在应用中证明是本人进行操作,一般通过用户名来证明

  在shiro中,用户通过提供principals(身份)和credentials(证明)给shiro,从而进行验证

  principals:身份,即主体的标识属性,可以i是任何东西,如用户名、邮箱等,唯一即可;一个主体可以有多个principals,但只有一个Primary principals,一般是用户名、密码、手机号

  credentials:证明、凭证,即只有主体知道的安全值,如密码、数字证书等

登录/登出:

  通过ini准备一些主体(实际应用中应该从数据库中获取):

[users]
draco = 615
harry = 630

  测试:模仿用户登录

  @Test
public void testLoginAndLogout(){ //创建sessionFactory,使用ini配置文件初始化
Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini");
     //创建securityManager实例
SecurityManager securityManager = factory.getInstance(); //将securityManager配置在当前运行环境中
SecurityUtils.setSecurityManager(securityManager); //获取当前subject
Subject currentUser = SecurityUtils.getSubject(); //创建用户令牌
UsernamePasswordToken token = new UsernamePasswordToken("draco", "615"); //直接登录
try {
currentUser.login(token);
} catch (UnknownAccountException uae) {
log.debug("用户名不存在 ");
} catch (IncorrectCredentialsException ice) {
log.debug("密码错误 ");
} catch (LockedAccountException lae) {
log.debug("未知错误? ");
} boolean authenticated = currentUser.isAuthenticated();
log.debug("是否登陆成功:"+ authenticated); }

  身份验证的流程:

    1 调用subject.login(token)进行登录,自动委托给SecurityManager

    2 SecurityManger负责真正的身份验证逻辑,通过SecurityManager.login()将身份验证委托给Authenticator

    3 Authenticator负责真正的身份验证,是Shiro API中核心的身份认证入口点

    4 Authenticator可能会委托给相应的AuthenticatorStrategy进行多Realm身份验证,默认ModularRealmAuthenticator会调用AuthenticationStrategy进行多Realm身份验证

    5 Authenticator会把相应的token传入Realm,从Realm获取身份验证信息,如果抛出异常表明身份验证失败

shiro 身份验证的更多相关文章

  1. Shiro身份验证及授权(二)

    一.Shiro 身份验证 身份验证的步骤: 收集用户身份 / 凭证,即如用户名 / 密码: 调用 Subject.login 进行登录,如果失败将得到相应的 AuthenticationExcepti ...

  2. Shiro 学习笔记(二)——shiro身份验证

    身份验证: 在应用中证明他就是他本人.一般上用身份证.用户/密码 来证明. 在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身 ...

  3. 跟开涛老师学shiro -- 身份验证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  4. 第二章:shiro身份验证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  5. shiro身份验证

    身份验证,即在应用中谁能证明他就是他本人.一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明. 在shiro中,用户需要提供principals (身份)和cre ...

  6. SSM整合Shiro 身份验证及密码加密简单实现

    1.导入maven的相关依赖 <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId&g ...

  7. cas+shiro实现不时时的去请求cas进行身份验证

    cas+shiro不进行时时去cas验证身份信息,需要用shiro在当前系统有一份完整的认证机构. 那么有一个问题,什么时候去cas校验信息,目前的配置方式: cas系统设置默认的浏览器session ...

  8. shiro 简单的身份验证 案例

    Apache Shiro是Java的一个安全框架,Shiro可以帮助我们完成:认证.授权.加密.会话管理.与Web集成.缓存等. 简单的身份验证 项目目录: 首先,在shiro.ini里配置了用户名和 ...

  9. Shiro固定身份验证

    Shiro基础身份验证 如果要进行shiro的日志信息读取,那么需要使用一个org.apache.shiro.util.Factory接口,在这个接口里面定义有一 取得SecuruityManager ...

随机推荐

  1. YUM安装调试以及命令具体解释

    背景,须要安装cacti,google了非常多安装资料.须要先yum安装一些准备lib包,比方snmp以及openssl等等. [root@mysqlvm2 ~]# yum install net-s ...

  2. 两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同

    思路:利用&用算加右移的方法来提取二进制中的每一位数,然后进行比较,查看是否相同. #include<stdio.h> #include<stdlib.h> int m ...

  3. Spring事务管理机制的实现原理-动态代理

    之前在做项目中遇到spring无法进行事务代理问题,最后发现是因为没有写接口,原因当时明白了,看到这篇文章写的清楚些,转过来 我们先来分析一下Spring事务管理机制的实现原理.由于Spring内置A ...

  4. Docker容器里的进程为什么要前台运行?相同的问题:docker运行apache为什么带FOREGROUND参数?docker运行nginx为什么带`daemon off`参数?

    <第一本Docker书>里面,讲到Docker容器启动web服务时,都指定了前台运行的参数. 例如apache: ENTRYPOINT [ "/usr/sbin/apache2& ...

  5. JFrame背景色设置

    JFrame对象本身是包含Pane的,一般我们在往JFrame中添加组件时,都加在了ContentPane中,这个可以通过JFrame的成员方法getContentPane()取出来.所以如果设置JF ...

  6. java远程调用linux的命令或者脚本

    转载自:http://eksliang.iteye.com/blog/2105862 Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) 使用步骤如下 ...

  7. 响应json去除参数值为空的参数-springboot配置

    1.添加jackson相关依赖 <!--jackson 开始--><dependency> <groupId>com.fasterxml.jackson.core& ...

  8. mysql官方测试 DB

    https://dev.mysql.com/doc/employee/en/ http://blog.51cto.com/dnsliu/ http://blog.csdn.net/zengxuewen ...

  9. SQLSERVER2008 存储过程基本语法

    SQLSERVER2008 存储过程基本语法 来源:https://www.cnblogs.com/tlduck/p/5462399.html 一.定义变量--简单赋值declare @a intse ...

  10. WebGL和ThreeJs学习6--射线法确定3D空间中所选物体

    一.在 threejs 中如何确定下图3D空间中鼠标点击位置的 object 对象? 二.射线法确定步骤及代码 //Three.js提供一个射线类Raycaster来拾取场景里面的物体.更方便的使用鼠 ...