跨域问题解决有多种,一般直接在服务端配置运行跨域即可。
项目以前是普通的Spring项目,通过Tomcat启动,之后改为springboot。
正常应该是配置filter运行跨域即可。再项目上线后发现跨域不生效,经过排查后发现项目改造不完整
- 本地开发是通过main方法启动,但是发布的服务器上是打包为war后启动
- 保留了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的init
和destroy
是默认方法,所以实现类没有实现这两个方法,导致启动后一直报错。