zoukankan      html  css  js  c++  java
  • 003 Shiro的认证

    一 . 概述

      认证:简单说就是登录,用户携带账号和密码信息通过Subject对象与shiro进行交互,看用户的身份凭证是否正确.

      本节需要演示认证的流程.


    二 .搭建环境

      本次使用ini充当Realm对象,使用IniSecurityManager充当SecurityManager对象,这个在后面我们都会重写进行定制的,这里只是简单介绍流程.

      我们的ini文件的内容:

    [users]
    trek=123

    这个ini文件之中,定义了一个账号为trek,密码为123的用户.


    三 .流程代码

        //实现shiro的认证过程
    //1---------------创建SecurityManager-----------------
    //创建SecurityManager SecurityManager securityManager = new IniSecurityManagerFactory("classpath:shiro.ini").createInstance(); //将当前的SecurityManager设置到当前的环境之中 SecurityUtils.setSecurityManager(securityManager); //2-----创建Subject对象 //下面实现的是一个登陆的功能 //获取Subkect,相当与一个Currentuser Subject currentUser = SecurityUtils.getSubject(); //3----封装token对象 //创建认证需要的token UsernamePasswordToken token = new UsernamePasswordToken("trek","123"); //4-调用login()方法 //实现登录功能 try { currentUser.login(token); } catch (AuthenticationException e) { logger.info("认证失败,账号为{},密码为{}",token.getUsername(),new String(token.getPassword())); throw new AuthenticationException(); } logger.info("认证成功!!");

    上面的代码描述的流程

    [1]创建SecurityManager对象

    [2]获取Subject独享

    [3]用户账号和密码信息封装为token对象,这里使用最为常用的UsernameAndPassword对象.

    [4]调用Subject的login()方法

    [5]4中调用login()会有两种情况发生,正常执行,说明认证成功(账号和密码都是对的),抛出异常,说明认证失败.


    四 .认证失败的异常AuthenticationException

    从上图之中我们可以看到.shiro定义了很多的认证异常,

    如,账号不存在(UnknownAccountException),密码不正确(IncorrectCredentialsException).

    我们可以使用这些异常表示在认证过程之中出现的问题,这样免去了我们自定义异常的麻烦.


    五 . 总结

      认证的过程十分简单,创建完环境对象之后,调用Subject的login()方法就可以了.

      认证成功,login()方法就会正常执行,否则就会出现异常,我们通过捕获异常就可以知道到底出现了什么认证问题. 

  • 相关阅读:
    vue-route+webpack部署单页路由项目,访问刷新出现404问题
    linux下安装大于2T硬盘,并分区替换现有mysql数据目录挂载点实现扩容
    linux下将mbr分区转换为gpt分区
    [go]接口型函数分析
    Type-C协议简介(CC检测原理)
    RocketMQ 重试机制
    RocketMQ与Kafka对比-评价版
    分布式开放消息系统(RocketMQ)的原理与实践
    mysql8.0的RPM方式安装
    nacos集群配置笔记
  • 原文地址:https://www.cnblogs.com/trekxu/p/9048679.html
Copyright © 2011-2022 走看看