項目場景
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中
