目前主流的跨域访问技术有JSONP和CORS,JSONP的优势在于能够支持较老版本的浏览器,弱势在于只能处理GET的请求,而CORS的优势在于能处理所有类型的请求,但弱势在于不能处理IE8以下版本的请求,说得比较笼统,悉知。
本文主要阐述在SPRingMVC中如何通过配置CORS来支持跨域访问,而前端不需要做任何配置。
以下是配置步骤:
1.Spring的版本建议采用4.2.0.RELEASE版本;
2.web.xml中加入过滤器配置;
<!-- CORS过滤器 start --> <filter> <filter-name>cors</filter-name> <filter-class>com.sdzn.filter.CorsFilter</filter-class> </filter> <filter-mapping> <filter-name>cors</filter-name> <url-pattern>/api/*</url-pattern> </filter-mapping> <!-- CORS过滤器 end -->3.加入过滤器配置类package com.sdzn.filter;import org.springframework.stereotype.Component;import javax.servlet.*;import javax.servlet.http.HttpServletResponse;import java.io.IOException;/** * CorsFileter 功能描述:CORS过滤器 * * @author RickyLee【l**@*.com.cn】 * @date 2017/2/9 11:24 */@Componentpublic class CorsFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse) servletResponse; 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,Authorization"); response.setHeader("Access-Control-Allow-Credentials", "true"); filterChain.doFilter(servletRequest, servletResponse); } @Override public void destroy() { }}4.另起一个项目或页面进行跨域测试;<!DOCTYPE HTML><html><head><script type="text/Javascript" src="jquery-1.8.2.min.js"></script><script type="text/javascript"> $(function(){ //按钮单击时执行 $("#testAjax").click(function(){ //取Ajax返回结果 //为了简单,这里简单地从文件中读取内容作为返回数据 htmlobj=$.ajax({url:"http://192.168.0.111:8080/api/v1/test",async:false}); //显示Ajax返回结果 $("#myDiv").html(htmlobj.responseText); }); });</script> </head> <body> <div id="myDiv"><h2>通过 AJAX 改变文本</h2></div> <button id="testAjax" type="button">Ajax改变内容</button> </body></html>如果页面内容有返回的json值,则跨域配置成功。
新闻热点
疑难解答