天天看點

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();


           

繼續閱讀