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