【问题标题】:How to create correctly a Filter in Java EE 8 from Java code?如何从 Java 代码在 Java EE 8 中正确创建过滤器?
【发布时间】:2020-08-06 22:56:35
【问题描述】:

我想通过 Java 代码在 Java EE 8 中以编程方式创建一个过滤器,所以我在我的应用程序中编写了这段代码。

Gif 捕获:gif capture one - gif capture two

我的过滤器是 LoginFilter.java

package afrominga.filters;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter
public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Hello from LoginFilter.");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("I am running the LoginFilter tasks.");
    }

    @Override
    public void destroy() {
        System.out.println("Goodbie from LoginFilter");
    }
}

我的 web.xml

中有
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <display-name>Archetype Created Web Application</display-name>

    <filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>afrominga.filters.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <error-page>
        <error-code>404</error-code>
        <location>/error/404.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/error/500.jsp</location>
    </error-page>
</web-app>

因此,在使用我的应用程序的根路径上下文打开我的浏览器时,过滤器在输出中打印我的 System.out 的文本,但我的页面留空并且没有显示主页.我不明白为什么会发生这种情况,这必须转发到我的主页,因为只在我的控制台中打印一个文本。

有人可以帮助我吗?请

【问题讨论】:

    标签: java servlets servlet-filters java-ee-8


    【解决方案1】:

    一个问题是你的 doFilter() 方法。现在,您的过滤器只是打印而不是将请求传递给下一个过滤器/您的应用程序。你只需要添加一行。

        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            System.out.println("I am running the LoginFilter tasks.");
            filterChain.doFilter(request, response)
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-05
      • 1970-01-01
      相关资源
      最近更新 更多