zoukankan      html  css  js  c++  java
  • shiro web环境初始化过程

    在web工程中使用shiro的时候需要配置一个shiro的listenser(EnvironmentLoaderListener)和一个shiro的filter(ShiroFilter)。

    listener用于初始化shiro的环境,filter用于拦截请求。

    shiro的初始化。

    EnvironmentLoaderListener继承EnvironmentLoader,并且实现了ServletContextListener的contextInitialized(ServletContextEvent ent)方法和contextDestroyed(ServletContextEvent event)方法

    这里主要介绍初始化的contextInitialized方法。

    在EnvironmentLoaderListener的contextInitialized方法中只有一行代码,就是调用了EnvironmentLoader的initEnvironment(ServletContext sc)方法。真正的初始化操作是在EnvironmentLoader中实现的。

     在EnvironmentLoader中的initEnvironment方法中又通过调用createEnvironment方法进行Environment的创建。

    在createEnvironment方法中先创建了一个Environment。然后调用了Environment的init方法,对Environment进行初始化

    在determineWebEnvironment中创建Environment时,先检查ServletContext中是否配置了名字为shiroEnvironmentClass的变量,若配置了该变量则该变量的值应该为一个Environment子类的全限定名称,shiro会根据该类实例化一个Environment的子类

    否则shiro会尝试使用ServiceLoader加载一个Environment的子类。

    若ServiceLoader也没有加载成功,则shiro会实例化一个默认的IniWebEnvironment。然后调用environment的init方法初始化environment。

     在IniWebEnvironment的init方法中会调用configure,configure方法会创建一个securityManger和一个filterchainResolver,

    createWebSecurityManger方法中会使用默认的IniwebSecurityMangerFactory创建一个IniWebSecurityManger,同时在getDefaults方法中初始化一个IniFilterChainResolverFactory,用来创建filterChainResolver

    如果在shiro的配置文件中配置了相关filter和url则会使用IniFilterChainResolverFactory的getInstance方法初始化一个FilterChainResolver。

    在看一下IniFilterChainResolverFactory,

     getInstance会调用createDefaultInstance方法,

    而pathMatchingFIlterChainResolver会把shiro默认的filter加载到filterchainManager中

    到这里,shiro的初始化就基本完成了,

    end

  • 相关阅读:
    poj 3621(最优比率环)
    bzoj 1497(最大权闭合子图)
    Dinic(模板 再错是不可能的 这辈子都不可能了)
    BZOJ 2038
    zoj 3822(概率dp)
    poj 3683(2-sat+拓扑排序)
    poj 2186(tarjan+缩点)
    hdu 5782(kmp+hash)
    hdu 6035(树形dp)
    Python爬取房屋租售信息
  • 原文地址:https://www.cnblogs.com/monkeydai/p/10952625.html
Copyright © 2011-2022 走看看