Tomcat报错 : 启动过滤器异常

项目场景

idea + ssm整合 + maven + tomcat8.x + web3.x + JDK1.8 + 登录拦截器完成 , 跨域过滤器完成并测试

问题描述

报错内容 :

严重 [RMI TCP Connection(2)-127.0.0.1] org.apache.catalina.core.StandardContext.filterStart 启动过滤器异常
java.lang.AbstractMethodError //抽象方法错误
		at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:281)
		at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:262)
		at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:106)
		at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4538)
		at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5181)
		at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
		....

报错截图 :

原因分析

报错提示 : filterStart 启动过滤器异常

可能原因 :

  • 过滤器内编写代码有问题
  • 版本兼容问题

解决方案

修改过滤器代码 (未解决)

过滤器代码本身没有问题

版本兼容问题 (已解决)

查找资料后怀疑是版本兼容问题 , 请教过大佬后重写过滤器的init方法 , 问题解决

代码演示 :

//原本没有重写init方法 , 因为init方法是default修饰的 , 应该是不需要重写的 , 所以怀疑是版本兼容性问题
@WebFilter("/*")//拦截所有请求
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String origin = request.getHeader("Origin");
        
        System.out.println("过滤器");
        // 响应标头指定 指定可以访问资源的URI路径

        response.setHeader("Access-Control-Allow-Origin", origin);

        //响应标头指定响应访问所述资源到时允许的一种或多种方法
        response.setHeader("Access-Control-Allow-Methods", "*");

        //设置  受支持请求标头
        response.setHeader("Access-Control-Allow-Headers", "*");

        // 指示的请求的响应是否可以暴露于该页面。当true值返回时它可以被暴露
        response.setHeader("Access-Control-Allow-Credentials", "true");
        
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

总结

版本兼容性问题仍需要注意 , 下次在添加依赖和导包之前需要好好了解一下兼容性问题 , 虽然这次只出现在了一个ssm整合的项目中 , 保不齐下次就出现在了springboot中

posted @ 2021-06-22 21:50  小_Leo  阅读(4989)  评论(0编辑  收藏  举报