1.DelegatingFilterProxy实际上是Filter的一个代理对象。默认情况下,Spring会到IOC容器中查找与<filter-name>对应的filter bean。也可以通过targetBeanName的初始化参数来配置bean的id。
2.配置shiroFilter
--id必须和web.xml文件中配置的DelegatingFilterProxy的<filter-name>一致。为什么?(看下文)
--若不一致,则会抛出异常。因为Shiro会来IOC容器寻找与<filter-name>名字对应的filter Bean。
(1)查看org.springframework.web.filter.DelegatingFilterProxy的源码,
1 /**2 * Return the name of the ServletContext attribute which should be used to retrieve the3 * { @link WebApplicationContext} from which to load the delegate { @link Filter} bean.4 */5 public String getContextAttribute() {6 return this.contextAttribute;7 }
1 /**2 * Set the name of the target bean in the Spring application context.3 * The target bean must implement the standard Servlet Filter interface.4 *By default, the {
@code filter-name} as specified for the5 * DelegatingFilterProxy in { @code web.xml} will be used.6 */7 public void setTargetBeanName(String targetBeanName) {8 this.targetBeanName = targetBeanName;9 }
(2)做以下调整,
web.xml:
applicationContext.xml:
结果:可以正常运行。