When writing filters for web service and loading Tomcat, I get an error.

Who can explain what happens when the server is loaded and why it converts to Filter?

@WebFilter(urlPatterns = {"/register"}, filterName = "regRequestFilter") public class RegisterRequestFilter implements RequestFilter{ @Override @Context public void RequestFiltering(HttpServletResponse response, HttpServletRequest request) { // TODO Auto-generated method stub } } @WebFilter(urlPatterns = {"/register"}, filterName = "regResponseFilter") public class RegisterResponseFilter implements ResponseFilter{ @Override @Context public void ResponseFiltering(HttpServletResponse response, HttpServletRequest request) { String origin = request.getHeader("Origin"); response.setContentType("application/json"); response.setHeader("Pragma", "no-cache"); response.setHeader("Access-Control-Allow-Methods","Post"); response.setHeader("Access-Control-Allow-Origin",origin); } 

Errors:

 java.lang.ClassCastException: coupon.filters.RegisterRequestFilter cannot be cast to javax.servlet.Filter at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4659) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5281) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) >java.lang.ClassCastException: coupon.filters.RegisterRequestFilter cannot be cast to javax.servlet.Filter at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:258) at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105) at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4659) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5281) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1408) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1398) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 

1 answer 1

Because you need to implement the javax.servlet.Filter interface , and yours is just a class.

  • And if I wanted to write my own and I do not need javax.servlet.Filter? - Maks.Burkov
  • So there will be a ClassCastException :) Any interface is a contract. JEE allows you to write your own filters, but for this you have to sign a contract through an interface implementation. Only in this way can the system guarantee you proper operation The @WebFilter annotation @WebFilter not make your class a filter, it is just a tag for the servlet container so that it can find your class in the classpath. - enzo
  • From your answer, this is what I understood to do and got the same mistake. How can I create my own filter with a class and correctly implement it? - Maks.Burkov
  • Carefully read. It is written to имплементировать интерфейс javax.servlet.Filter . And you have some kind of RequestFilter . - enzo
  • So I wrote from the top that I do not want to implement it .. There is no other way? And if in web.xml to configure "Custom" filters for servlets? - Maks.Burkov