第六节 与WEB集成原理分析

前言

        本小节仅仅是分析shiro的WEB环境加载的过程。有时候我们在使用框架或者集成其它插件的时候,可能会遇到各种各样启动的问题,这个时候能够去追踪源码,找到问题所在,也是我们开发人员的必备技能之一。

一、与WEB集成的配置

        还记得吗,以前我们在没有与WEB环境进行集成的时候,为了生成SecurityManager对象,是通过手动读取配置文件生成工厂对象,再通过工厂对象获取到SecurityManager的。就像下面代码展示的那样。

       第六节 与WEB集成原理分析_第1张图片

        不过,现在我们既然说要与WEB集成,那么首先要做的事情就是把我们的shiro.ini这个配置文件交付到WEB环境中。SO,让我们忘记那些复杂的配置,重写编写一份HelloWorld级别的Shiro.ini配置文件。帐号jay,密码123。此人是一个coder角色,所以拥有code:insert、code:update两种权限。

#shiro.ini配置文件
#帐号jay,密码123。此人是一个coder角色
#所以拥有code:insert、code:update两种权限
[users]
jay=123,coder
[roles]
coder=code:insert,code:update

        该如何把shiro.ini配置文件放到WEB环境中呢?首先,我们需要引入shiro的相关依赖。最下面的org.apache.shiro.shiro-web的依赖包是我们今天的主角。

      
        
            commons-logging
            commons-logging
            1.1.3
        
        
            org.apache.shiro
            shiro-core
            1.2.2
        
        
            org.apache.shiro
            shiro-web
            1.2.2
        
    

        引入了Shiro的依赖以后,我们需要在web.xml中配置一些关于Shiro的东西。下面的配置中,首先配置两个服务器的全局变量。shiroEnvironmentClass变量用于指定初始化SecurityManager的环境,shiroConfigLocations用于指定shiro的配置文件的位置。

        shiroEnvironmentClass变量对应的值是IniWebEnvironment。它是用来干嘛的呢?请看下面的那个监听器,它是用于在服务器启动的时候,去初始化一个Shiro环境,即创建一个IniWebEnvironment对象。我们先通过读取shiroEnvironmentClass变量的值,初始化一个shiro环境,然后再创建一个SecurityManager对象绑定给我们的shiro环境。稍后你可以在源码追踪环节里面看到相关代码。不过此时你需要关注一下如何再web.xml中配置它们。

    
    
        shiroEnvironmentClass
        org.apache.shiro.web.env.IniWebEnvironment
    
    
    
        shiroConfigLocations
        classpath:shiro.ini
    

    
    
        org.apache.shiro.web.env.EnvironmentLoaderListener
    

    
    
        shiroFilter
        org.apache.shiro.web.servlet.ShiroFilter
    
    
        shiroFilter
        
        /*
    

        上述配置完毕,与我们的WEB集成就结束了,是不是很简单。好了,配置虽然简单,但是Shiro到底做了什么操作呢?让我们一起去探索一下吧。 

二、SecurityManager对象的生成

        根据上面的论述,我们知道SecurityManager对象会在监听器里面生成。现在就让我们一探究竟。

       (1)我启动了服务器,监听器捕获到了服务器启动事件。我现在所处的位置EnvironmentLoaderListener监听器的入口处。

第六节 与WEB集成原理分析_第2张图片

        (2)进入方法内查看,它先根据我们的shiroEnvironmentClass变量的值org.apache.shiro.web.env.IniWebEnvironment,初始化一个shiro环境对象。

第六节 与WEB集成原理分析_第3张图片

        (3)最后在创建一个SecurityManager对象,再将其绑定到刚才通过字节码创建的Shiro环境对象中。

第六节 与WEB集成原理分析_第4张图片

三、源码下载

        本章节项目源码:点击我下载源码 

----------------------------------------------------分割线------------------------------------------------------- 

        下一篇:第七节 shiro自带的拦截器分析

        阅读更多:跟着大宇学Shiro目录贴

 

你可能感兴趣的:(跟着大宇学Shiro)