http://blog.csdn.net/qq_28139345/article/details/79784455,我在这篇文章里面记录了.Net的WCF解决跨域问题。Java的跨域问题和.Net一样,毕竟跨域这东西,都是浏览器造的孽。所以,要解决跨域问题,很明显也是一样的。关于跨域的问题可以去看看上面这篇文章。虽然介绍的不是很完整,但是让人通俗易懂些。所以呢我这里就不做跨域方面的知识延伸了。大家觉得我的文章介绍的不是很清晰的话,可以去看看其它博主的。也可以自行百度。
话不多说。直接上代码。
我的项目是Spring Boot的这里用了过滤器来实现的跨域,除了过滤器可以使用拦截器或者直接在接口类里面实现跨都可以。
这里我过滤器的代码:
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.kmdar.ticket.common.HttpClientHelper;
import com.kmdar.ticket.model.ResultDto;
import net.minidev.json.JSONObject;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.List;
@WebFilter(urlPatterns = "/*")
public class CustomFilter implements Filter {
@Override
public void destroy() {
//System.out.println("CustomFilter过滤器销毁");
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
//System.out.println("请求被拦截......");
final HttpServletRequest request = (HttpServletRequest) req;
final HttpServletResponse response = (HttpServletResponse) res;
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
// 跨域
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Headers", "*");
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Methods", "GET,POST,PUT,OPTIONS,DELETE");
if (request.getMethod().equals("OPTIONS")) {
response.setStatus(HttpServletResponse.SC_OK);
return;
}
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
//System.out.println("CustomFilter初始化......");
}
}
不用看了,用Spring Boot的话你直接新建这样一个类就可以了。对的,你没有听错,就是那么简单,我当时来研究的时候就是进行了各种多余操作,导致出现:options请求成功了,但是没有继续发送Post请求了。要么就是options 200了,Post 也200了。但是Js接收回调时居然是Err,不是success。各种脑壳疼。
这里还得注意一点。设置请求头时,Access-Control-Allow-Origin这里允许的跨域请求最好指定域名,我这里是偷懒了。Access-Control-Allow-Headers这里最好只设置允许的请求头内容(我遇到过这里设置为*的话部分浏览器options请求成功了,但是不会继续发送Post请求了,会报这个错:Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.,我也不是很清楚到底什么原因导致的,明明设置了*,不就是允许所有内容的吗,为什么还是提示Content-Type 不被允许,郁闷-----------)
自己去摸索,搞了头都大了。
致敬所有程序员,辛苦了!