如何修复 ClassNotFoundException:javax.servlet.http.HttpFilter

Rad*_*dek 6 java jsp tomcat servlets maven

启动应用程序后,我收到 ClassNotFoundException: javax.servlet.http.HttpFilter 。

过滤器必须将未登录的用户重定向到登录页面

Pom.xml

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>javax.servlet.jsp-api</artifactId>
            <version>2.3.3</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.8</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

验证过滤器.java

@WebFilter("/to-do/*")
public class AuthenticationFilter extends HttpFilter {
    @Override
    public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException {
        if (AuthenticationService.isAuthenticated(req)){
            super.doFilter(req,res,chain);
        }else{
            res.sendRedirect("/");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

汤姆猫日志:

java.lang.NoClassDefFoundError: javax/servlet/http/HttpFilter
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:763)
[...]
Caused by: java.lang.ClassNotFoundException: javax.servlet.http.HttpFilter
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1344)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1172)
    ... 59 more

Run Code Online (Sandbox Code Playgroud)

当我评论 @WebFilter 应用程序时工作正常。我尝试在 web.xml 中添加 fiter 但它也不起作用;/

m.a*_*icz 5

您需要至少使用 Tomcat 版本9 \xe2\x80\x94是在Servlet 4.0HttpFilter中引入的。

\n

Tomcat 8 提供了 Servlet 3.1,但该类没有可用。

\n

另一种方法是在使用版本 8 时添加依赖项javaee-api

\n
<dependency>\n    <groupId>javax</groupId>\n    <artifactId>javaee-api</artifactId>\n    <version>8.0</version>\n</dependency>\n
Run Code Online (Sandbox Code Playgroud)\n