shiro框架源码解析与改造(一)---DelegatingFilterProxy

DelegatingFilterProxy是springmvc中的类。

在传统项目中web.xml中配置:

<filter>
    <filter-name>ShiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>

如果在spring boot项目中,可以用下面的配置方式:

@Bean
    public FilterRegistrationBean setFilter(){

        FilterRegistrationBean filterBean = new FilterRegistrationBean();
        filterBean.setFilter(new DelegatingFilterProxy());
        filterBean.setName("ShiroFilter");
        filterBean.addUrlPatterns("/*");
        return filterBean;
    }

这个类的主要作用是查找真正的filter,这个filter的名字和DelegatingFilterProxy设置的filter名字一致。
由下面的代码执行查找工作:

protected void initFilterBean() throws ServletException {
        synchronized (this.delegateMonitor){
            if(this.delegate==null){
                if (this.targetBeanName==null){
                    this.targetBeanName=this.getFilterName();
                }
                WebApplicationContext wac= this.findWebApplicationContext();
                if(wac != null) {
                    this.delegate = this.initDelegate(wac);
                }
            }

        }
    }
WebApplicationContext wac= this.findWebApplicationContext();
这一行是获取springmvc容器
this.delegate = this.initDelegate(wac);
这一行就是从springmvc的容器中查找名为ShiroFilter的bean。
 private Filter initDelegate(WebApplicationContext wac) {
        Filter delegate = (Filter)wac.getBean(this.getTargetBeanName(), Filter.class);
        return delegate;
    }
targetName就是DelegatingFilterProxy的name
this.targetBeanName=this.getFilterName();


猜你喜欢

转载自blog.csdn.net/ljz2016/article/details/81213522