这几天在开发中编写项目时需要前后端分离,刚好涉及到跨域这个问题,很早之前做项目时也用过,也是在网上找的列子,来源已经无处可寻了,若侵必删!
跨域问题一般出现两者服务器不同或者不同的端口上访问资源时会存在的问题,本文章目前适用于SpringMVC上,其他框架暂时还没涉猎,等以后接触到后在补充。
本次解决跨域的问题使用的是 filter.jar 包实现。
若是项目使用的是maven,导入依赖包:
com.thetransactioncompany
cors-filter
2.5
(直接复制即可)
然后找到web.xml配置文件,在里面加入下面这段配置:
CORS
com.thetransactioncompany.cors.CORSFilter
cors.allowOrigin
*
cors.supportedMethods
GET, POST, HEAD, PUT, DELETE,OPTION
cors.supportedHeaders
Accept, Origin, X-Requested-With, Content-Type, Last-Modified
cors.exposedHeaders
Set-Cookie
cors.supportsCredentials
true
cors.maxAge
3600
CORS
/*
这段配置代码就不作太多解释,直接复制即可使用。
后面需要编写一个 filter 的实现类,凡是需要跨域的类或接口,直接继承即可实现跨域,如下:
import javax.servlet.*;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;public class KuaY implementsFilter {
@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throwsIOException, ServletException {
HttpServletResponse response=(HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age","3600");
response.setHeader("Access-Control-Allow-Headers","x-requested-with, content-type");
chain.doFilter(req, res);
}
@Overridepublic voidinit(FilterConfig filterConfig) {}
@Overridepublic voiddestroy() {}
}
以上方式不需要前端编写任何代码,直接后台全部搞定,使用方式就是继承 KuaY 这个实现类,所有前后端皆可跨域实现。原理可以自己去研究一下,路漫漫其修远兮,欢迎拍砖!
原文:https://www.cnblogs.com/Wang352051443/p/9709387.html