java - 如何修复 ClassNotFoundException:javax.servlet.http.HttpFilter
问题描述
启动应用程序后,我收到 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>
AuthenticationFilter.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("/");
}
}
}
雄猫日志:
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
当我评论 @WebFilter 应用程序时,它可以正常工作。我试图在 web.xml 中添加 fiter 并且它也不起作用;/
解决方案
您至少需要使用 Tomcat 版本9 - *HttpFilter** 是在Tomcat 8 实现Servlet 3.1时在Servlet 4.0中引入的
javaee-api
另一种方法是在版本8中添加依赖项
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0</version>
</dependency>
推荐阅读
- elasticsearch - 百分位对同一查询给出不同的结果
- ios - iOS cURL 命令仅适用于 WiFi - iOS
- java - 无法从值中包含冒号的 Json 字符串生成键值对
- bash - 从命令获取行数同时仍输出到终端和文件的最佳方法
- .net-core - 在 dotnetcore、startup.cs、ConfigureServices、DbContext 选项中缺少 UseOracle()
- sql-server - 自联接表和对具有不同条件的同一列求和(SQL Server)
- ios - NavigationItem.prompt 导致 CGAffineTransformInvert:奇异矩阵
- ios - 仅来自平面列表 iOS 的 React-Native 巨大内存使用和崩溃
- android - 尽管仅指定纵向,但某些 Android 设备上的屏幕方向更改为横向
- android - Retrofit2 - GSON - 应为 BEGIN_ARRAY 但为 STRING 或应为 BEGIN_OBJECT 但为 BEGIN_ARRAY