zoukankan      html  css  js  c++  java
  • shiro系列4:认证源码解析

    认证过程:

    1、SecurityManager对象的生成。SecurityManager对象是在监听器里面生成的。

     

     

    2、根据我们的shiroEnvironmentClass变量的值org.apache.shiro.web.env.IniWebEnvironment,初始化一个shiro环境对象。

     

    3、创建一个SecurityManager对象,并将其绑定到刚才通过字节码创建的Shiro环境对象中。

     

    4、查看subject.login(token) 的源码。Subject将用户的用户名密码(token)委托给了securityManager去认证。

     

    5、securityManager将用户的token委托给内部认证组件authenticator去认证。

     


    6、用户的token需要去跟数据源Realm做对比,所以authenticator又将认证的任务交给Realm去做。

     

    7、Realm在接到认证任务后,将调用Realm的实现类AuthenticatingRealm的doGetAuthenticationInfo(token)方法。而这个方法,就是我们要重写的方法,首先我们自己编写了一个类,继承了AuthorizingRealm,并实现了doGetAuthenticationInfo方法,在doGetAuthenticationInfo中查询数据库,并将数据库中存放的用户名与密码封装成了一个AuthenticationInfo对象返回。

     

    8、把用户输入的帐号密码与刚才你从数据库中查出来的帐号密码对比一下即可。token封装着用户的帐号密码,AuthenticationInfo封装着从数据库中查询出来的帐号密码。如果没有报异常,说明本次登录成功。

     

     

    总结:

     

    1、首先将用户名和密码封装成token。如果数据库中的密码是加密的,则密码需要按指定加密方式生成对应的密文密码。

    2、Subject门面获取到token,并传递到内部的SecurityManager中。

    3、SecurityManager调用内部组件authenticator去验证。

    4、authenticator将token传递到Realm中去。

    5、最终由我们自定义Realm继承AuthorizingRealm,并实现doGetAuthenticationInfo方法。将数据库中的数据查询出来,放到Realm中去。shiro将会分析用户输入的token是否与数据库中查出来的一致。

     

  • 相关阅读:
    【XSY2534】【CF835D】Palindromic characteristics 回文自动机
    启发式合并&线段树合并/分裂&treap合并&splay合并
    【XSY2534】【BZOJ4817】树点涂色 LCT 倍增 线段树 dfs序
    线性求逆元
    l1 和l2范数的真实意义
    方向导数及梯度
    大厂实习总结和反思
    高考报考以及心态调整健康贴士
    【骑士走棋盘】
    【老鼠走迷宫一】
  • 原文地址:https://www.cnblogs.com/XueTing/p/13734493.html
Copyright © 2011-2022 走看看