美文网首页Shiro
Shiro源码分析系列:01.shiro初始化

Shiro源码分析系列:01.shiro初始化

作者: 城南码农 | 来源:发表于2019-04-18 19:40 被阅读0次

    关于shiro的架构和组件,可以参考开涛跟我学Shiro系列

    Shiro初始化

    1. 初始化DelegatingFilterProxy:
        @Bean
        public FilterRegistrationBean getShiroFilter() {
            FilterRegistrationBean registrationBean = new FilterRegistrationBean();
            // 创建FactoryBean的代理对象
            DelegatingFilterProxy delegatingFilterProxy = new DelegatingFilterProxy("shiroFilter");
            delegatingFilterProxy.setTargetFilterLifecycle(true);
            registrationBean.setFilter(delegatingFilterProxy);
            registrationBean.setEnabled(true);
            registrationBean.setOrder(2);
            registrationBean.addUrlPatterns("/*");
            registrationBean.setDispatcherTypes(DispatcherType.REQUEST);
            return registrationBean;
        }
    
    1. 初始化ShiroFilterFactoryBean,ShiroFilterFactoryBean实现了Spring的FactoryBean,默认会调用getObject(),实际调用createInstance(),实际返回一个SpringShiroFilter对象:


      securityManage.jpg
      chainResolver.jpg

      至此,初始化过程完成,主要构造了SpringShiroFilter的对象。

    接管request请求

    主要搞清楚一件事,Shiro怎么从Spring那里接管到请求?先看一张流程图:


    shiro filter request.jpg
    • 初始化阶段生成的DelegatingFilterProxy实现了Servlet的Filter接口;
    • 它是一个代理对象,真正的对象是ShiroFilterFactoryBean。这里是静态代理;
    • executeChain()方法是核心流程,通过初始化阶段的chainResolver解析器解析出自定义的Filter对象,并且开始循环调用他们的doFIlter方法。
      至此,shiro就完全接管了web请求,接下来的章节会分析如何来拦截这些请求,执行认证,鉴权的流程。

    相关文章

      网友评论

        本文标题:Shiro源码分析系列:01.shiro初始化

        本文链接:https://www.haomeiwen.com/subject/kfsgwqtx.html