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

关于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初始化)