spring-mvc - 简单的 Web 应用程序过滤器不过滤请求

标签 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 将它委托(delegate)给我的过滤器 - 来自 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>

但我在我的网页中看到的都是空的(我期望 HelloWorldFilter 提供 Hello World!)。 过滤器甚至不会被调用..

我是不是漏掉了什么?

提前致谢, 瑜珈

最佳答案

好的,解决了。

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

在我的例子中,我在我的应用程序上下文中有:

<bean id="helloWorldFilter"...

在我的 web.xml 中:

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

因此,一次是大写 H,一次是小写 h - 这导致了问题。 为了解决这个问题,我只是将应用程序上下文中的 bean id 更改为 HelloWorldFilter。

关于spring-mvc - 简单的 Web 应用程序过滤器不过滤请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10453109/

相关文章:

spring - 如何访问 Thymeleaf 中包含点的 Spring MVC 模型属性名称

java - spring-mvc Hibernate 中 Autowiring 依赖项失败

java - 带有注释的 Spring MVC 验证

java - jsp过滤器,获取页面名称

jsf-2 - 是否可以在过滤器内创建 JSF2 session 托管 Bean?

java - 我们可以在 servlet-filter 的 url-mapping 中没有条件吗

java - Spring MVC 根据id从多个表映射对象

maven - 错误: package javax. servlet不存在

tomcat - 处理 Url 中不区分大小写的应用程序名称

java - 如何验证并重定向到外部应用程序以进行 SSO?