记一次跨域处理

跨域问题解决有多种,一般直接在服务端配置运行跨域即可。

项目以前是普通的Spring项目,通过Tomcat启动,之后改为springboot。
正常应该是配置filter运行跨域即可。再项目上线后发现跨域不生效,经过排查后发现项目改造不完整

  1. 本地开发是通过main方法启动,但是发布的服务器上是打包为war后启动
  2. 保留了web.xml文件,跨域配置在spring容器中不生效。

解决办法就是把filter改到web.xml即可。

1
2
3
4
5
6
7
8
9
10
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH");
response.setHeader("Access-Control-Allow-Headers", "*");
if ("OPTIONS".equals(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_ACCEPTED);
return;
}
filterChain.doFilter(servletRequest, servletResponse);

改造实现filter过程中也出现了一次异常。因为javax.servlet-api(provided)使用的版本比较高,filter的initdestroy是默认方法,所以实现类没有实现这两个方法,导致启动后一直报错。