zoukankan      html  css  js  c++  java
  • shiro登录源码

      //1、获取SecurityManager工厂,此处使用Ini配置文件初始化SecurityManager
            Factory<org.apache.shiro.mgt.SecurityManager> factory =
                    new IniSecurityManagerFactory(configFile);
    
       //2、得到SecurityManager实例 并绑定给SecurityUtils
            org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
            SecurityUtils.setSecurityManager(securityManager);
    
    
    
    SecurityUtils.setSecurityManager(securityManager)源码:
    * *
    *设置一个VM(静态)单例SecurityManager,专门用于透明使用
    * {@link #getSubject() getSubject()}实现。
    * < p / >
    * <b>此方法调用主要用于框架开发支持。应用程序开发人员很少,
    *如果需要,需要调用这个方法。</b>
    * < p / >
    Shiro开发团队更喜欢SecurityManager实例是非静态的单例应用程序
    *和<em>不是</em> VM静态单例。不使用静态内存的应用程序单例需要一些排序
    *应用程序配置框架,为您维护应用程序范围的SecurityManager实例
    *(例如,Spring或EJB3环境),这样对象引用就不需要是静态的。
    * < p / >
    在这些环境中,Shiro通过自己的线程根据当前正在执行的线程获取主题数据
    *框架集成代码,这是使用Shiro的首选方式。
    * < p / >
    *然而在一些环境中,例如一个独立的桌面应用程序或applet不使用Spring或
    * EJB或类似的配置框架,VM-singleton可能更有意义(尽管前者仍然是首选)。
    *在这些环境中,通过此方法设置SecurityManager将自动启用
    * {@link #getSubject() getSubject()}调用函数,配置很少。
    * < p / >
    *例如,在这些环境中,这将工作:
    * <前>
    * DefaultSecurityManager securityManager = new {@link org.apache.shiro.mgt。DefaultSecurityManager DefaultSecurityManager} ();
    * securityManager。setRealms (…);//一个或多个域
    * < b > SecurityUtils。setSecurityManager (securityManager); < / b > < / pre >
    * < p / >
    *然后在应用程序代码的任何地方,下面的调用将返回应用程序的主题:
    * <前>
    * currentUser = securityutil . getsubject ();</pre>
    *
    * @param securityManager将securityManager实例设置为一个VM静态单例。
    * /
    public void setSecurityManager(SecurityManager SecurityManager) {
    SecurityUtils。securityManager = securityManager;
    }
    
    
     //3、得到Subject及创建用户名/密码身份验证Token(即用户身份/凭证)
            Subject subject = SecurityUtils.getSubject();
            UsernamePasswordToken token = new UsernamePasswordToken(username, password);
    
    
    UsernamePasswordToken(username, password):源码:
    / * *
    *构造一个新的UsernamePasswordToken,封装提交的用户名和密码
    *在验证过程中,使用<tt>null</tt> {@link #getHost() host}和
    * a <tt>remember berme </tt> default <tt>false</tt>
    * < p / >
    * <p>这是一个方便的构造函数,通过一个字符在内部维护密码
    * array,即<tt>password.toCharArray();注意,将密码存储为字符串
    *在您的代码中可能存在安全隐患,如类JavaDoc.</p>中所述
    *
    提交认证的用户名
    提交用于身份验证的密码字符串
    * /
      public UsernamePasswordToken(final String username, final String password) {
            this(username, password != null ? password.toCharArray() : null, false, null);
        }
    
    
    
    
     subject.login(token):源码:
    / * *
    *为该主题/用户执行一次登录尝试。
    如果不成功,
    抛出{@link AuthenticationException},它的子类表示尝试失败的原因。
    *如果成功,与提交的主体/凭证相关联的帐户数据将是
    *与这个{@code Subject}相关联,该方法将悄悄地返回。
    * < p / >
    *静悄悄返回后,可以考虑这个{@code Subject}实例
    * authenticated和{@link #getPrincipal() getPrincipal()}将是非空的
    * {@link #isAuthenticated() isAuthenticated()}将是{@code true}。
    *
    * @param令牌该令牌封装了要传递给的主题的主体和凭据
    *验证子系统。
    * @throws org.apache.shiro.authc.AuthenticationException
    *如果身份验证尝试失败。
    * @since 0.9
    * /
    void login(AuthenticationToken token) throws AuthenticationException;
    View Code
    一点点学习,一丝丝进步。不懈怠,才不会被时代淘汰
  • 相关阅读:
    计算机书籍.网址
    MVC是必知必用的
    技术
    三色旗帜分类
    巴斯卡三角形
    Centos安装wine等组件的问题
    some software that is used to speed up your system
    驾照考试系统之流程图
    用静态成员函数调用非静态成员变量
    MFC 进度条控件
  • 原文地址:https://www.cnblogs.com/wangbiaohistory/p/12643185.html
Copyright © 2011-2022 走看看