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

  • 相关阅读:
    AudioStreamer电话打进时崩溃
    ios中NSLog输出格式大全
    IOS Framework制作(一)
    UIButton上的文字添加阴影
    Tim Cook向员工发邮件,祝贺大家实现创纪录的季度
    ios 通讯录“写”操作大全
    AVAudioSession的Category
    IOS播放优酷视频
    iOS 设备的网页调试工具Firebug
    iOS中retain和copy的区别
  • 原文地址:https://www.cnblogs.com/monkeydai/p/10952625.html
Copyright © 2011-2022 走看看