简单的Web应用程序筛选器不会过滤请求

时间:2012-05-04 17:00:47

标签: spring-mvc servlet-filters

开始使用STS并创建一个新的基本“Hello World”Spring MVC项目。 我想在我的应用程序中添加一个过滤器,因此我使用以下doFilter方法创建了一个过滤器(HelloWorldFilter.java):

public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        System.out.println("Entering Filter");
        request.setAttribute("hello", "Hello World from HelloWorldFilter!");
        chain.doFilter(request, response);
        System.out.println("Exiting HelloWorldFilter");
    }

根据我读到的内容(我的过滤器)也应该在应用程序上下文中定义为一个spring bean(Spring将它委托给我的过滤器 - 来自this manual

所以在我的应用程序上下文中我有:

<bean id="helloWorldFilter" class="com.yl.mvc.filters.HelloWorldFilter"> </bean>

我的web.xml包含以下内容:

<filter>
    <display-name>HelloWorldFilter</display-name>
    <filter-name>HelloWorldFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>HelloWorldFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

在我的.jsp文件中,我添加了:

<P><%=request.getAttribute("hello")%></P>

但我在网页中看到的只是null(我期待HelloWorldFilter的Hello World!)。 甚至都没有调用过滤器..

我在这里错过了什么吗?

提前致谢, 瑜珈

1 个答案:

答案 0 :(得分:2)

好的,它解决了。

过滤器(它是一个spring bean)在bean定义中(在应用程序上下文中)必须与filter-name元素(在web.xml中)具有相同的名称。

在我的情况下,我在我的应用程序环境中:

<bean id="helloWorldFilter"...

并在我的web.xml中:

<filter-name>HelloWorldFilter</filter-name>

因此,一旦它与资本H和曾经的小h - 导致问题。 要解决它,我只需将应用程序上下文中的bean id更改为HelloWorldFilter。