Java 跨域问题解决

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 不被允许,郁闷-----------



自己去摸索,搞了头都大了。


致敬所有程序员,辛苦了!





猜你喜欢

转载自blog.csdn.net/qq_28139345/article/details/80095051