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