• 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

  • 相关阅读:
    Pollard rho模板
    GDKOI2018游记
    BZOJ2599: [IOI2011]Race
    Codeforces914E. Palindromes in a Tree
    可以删点的并查集
    本月题量 180122晚-180222午
    51nod1238 最小公倍数之和 V3
    51nod1237 最大公约数之和 V3
    hdu5608:function
    51nod1244 莫比乌斯函数之和
  • 原文地址:https://www.cnblogs.com/monkeydai/p/10952625.html
Copyright © 2020-2023  润新知