003 Shiro的认证

冷暖自知 提交于 2020-02-26 02:21:57

一 . 概述

  认证:简单说就是登录,用户携带账号和密码信息通过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()方法就会正常执行,否则就会出现异常,我们通过捕获异常就可以知道到底出现了什么认证问题. 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!