美文网首页
Shiro5-使用 Shiro 进行认证

Shiro5-使用 Shiro 进行认证

作者: 我相信你爱过gg | 来源:发表于2017-05-18 22:46 被阅读71次

    shiro 认证流程

    认证流程

    从上面流程可以看出最重要的就是 Authenticator 和 Realm.

    入门程序

    使用Shiro 架包搭建工程

    注:这里暂时没用到 Spring Hibernate 等架包.

    构建securityManager环境步骤

    创建shiro-first.ini

    #对用户信息进行配置
    [users]
    #用户账号和密码
    zhangsan=111111
    lisi=22222
    
            // 创建securityManager工厂,通过ini配置文件创建securityManager工厂
            Factory<SecurityManager> factory = new IniSecurityManagerFactory(
                    "classpath:shiro-first.ini");
    
            // 创建SecurityManager
            SecurityManager securityManager = factory.getInstance();
    
            // 将securityManager设置当前的运行环境中
            SecurityUtils.setSecurityManager(securityManager);
    
            // 从SecurityUtils里边创建一个subject
            Subject subject = SecurityUtils.getSubject();
    
            // 在认证提交前准备token(令牌)
            // 这里的账号和密码 将来是由用户输入进去
            UsernamePasswordToken token = new UsernamePasswordToken("zhangsan",
                    "111111");
    
            try {
                // 执行认证提交
                subject.login(token);
            } catch (AuthenticationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            // 是否认证通过
            boolean isAuthenticated = subject.isAuthenticated();
    
            System.out.println("是否认证通过:" + isAuthenticated);
    
            // 退出操作
            subject.logout();
    
            // 是否认证通过
            isAuthenticated = subject.isAuthenticated();
    
            System.out.println("是否认证通过:" + isAuthenticated);
    

    程序执行流程

    1. 通过 ini 配置文件创建SecurityManager
    2. 调用 subject.login() 方法提交认证.
      内部通过 SecurityManager 进行认证,在SecurityManager进行认证的时候会调用 Authenticator 接口的实现类 RealmSecurityManager.
    Authenticator 接口实现类

    3.然后 RealmSecurityManager 再去调用 ModularRealmAuthenticator 进行认证.认证时 ModularRealmAuthenticator 会拿着用户输入的 token 和 shiro-first.ini 中配置的用户账号和密码进行对比.

    4.如何对比呢?
    ModularRealmAuthenticator 会调用 Realm 接口的实现类 IniRealm, IniRealm 负责从 shiro-first.ini 中查询用户信息(账号和密码), 如果找不到账号会返回 null, 如果找到账号,则会将账号和密码返回.
    ModularRealmAuthenticator 会判断 IniRealm 返回的信息,如果为 null 则跑出 org.apache.shiro.authc.UnknownAccountException异常.
    如果密码输出错,则跑出org.apache.shiro.authc.IncorrectCredentialsException异常.

    Realm 接口的实现

    总结

    IniRealm: 读取 ini 配置文件, 将来要连接数据,那么就需要仿照此类来读取数据库的账号和密码.
    RealmSecurityManager: 用来判断Realm找到的用户名和密码是否匹配, 或是否找到用户.

    相关文章

      网友评论

          本文标题:Shiro5-使用 Shiro 进行认证

          本文链接:https://www.haomeiwen.com/subject/jsljxxtx.html