Issue
I'm getting an ClassNotFoundException: javax.servlet.http.HttpFilter after starting an app.
Filter has to redirect unlogged users to login page
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("/");
}
}
}
Tomcat Log:
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
When I comment an @WebFilter app works fine. I've tried to add fiter in web.xml and it dosen't work too ;/
Solution
You need to use at least Tomcat version 9 - *HttpFilter** was introduced in Servlet 4.0 when Tomcat 8 is implementing Servlet 3.1
Another approach is to add dependency javaee-api
in version 8
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>8.0</version>
</dependency>
Answered By - m.antkowicz