• 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

  • 相关阅读:
    记一下后续要看的点
    vue 封装request.js
    shuf命令简单用法
    Redis string 字符串
    Redis 事务操作
    Redis Zset 有序集合
    php操作redis的一些基本操作
    pytest自动化测试入门介绍
    idea&myeclipse 自动生成serialVersionUID
    leetCode1104. 二叉树寻路(medium)
  • 原文地址:https://www.cnblogs.com/monkeydai/p/10952625.html
Copyright © 2020-2023  润新知