Java 跨域操作

跨域这个问题确实让人很头疼,对于一般的来说,后台做处理就可以。

一般来说,出现跨域问题只会是前台发送回来的报文头格式不一致所造成的,前台请求一般是两次,第一次是一个OPTIONS的请求,这个请求是一个开路的请求,为后边所访问的方法开辟一条可操作的道路,跨域问题的出现就是因为OPTIONS请求至后台后出现了问题,所以该请求的访问才会出现问题,导致后边的操作无法进行。

1.第一种办法

      使用自带的Spring MVC 的跨域操作就可以,因为Spring MVC本身就是连接页面和逻辑的一个中暑按钮,所以不必要自己在给一个自定义的格式。

Java 跨域操作

<mvc:cors>
    <mvc:mapping path="/**"
                 allowed-origins="*"
                 allowed-methods="PUT, POST, GET, DELETE, OPTIONS"
                 allowed-headers="Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild, x-access-token"
                 allow-credentials="true" />
    <mvc:mapping path="/resources/**"
                 allowed-origins="*" />
</mvc:cors>

 

2.第二种办法

      使用拦截器的方式进行改变报文头,方法请求前进入拦截器,拦截器访问到对应的OPTIONS操作后会进行处理,返回正确格式的报文头。

Java 跨域操作

public class AllowOriginInterceptor implements HandlerInterceptor{
    //切面编程:Handler执行之前执行
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        httpServletResponse.setHeader("Access-Control-Allow-Origin", "*");
        httpServletResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild, x-access-token");
        httpServletResponse.setHeader("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS");
        httpServletResponse.setHeader("Access-Control-Allow-Credentials", "true");

        // 浏览器是会先发一次options请求,如果请求通过,则继续发送正式的post请求
        // 配置options的请求返回
        if (httpServletRequest.getMethod().equals("OPTIONS")) {

            httpServletResponse.setStatus(200);

            httpServletResponse.getWriter().write("OPTIONS returns OK");
        }

        return true;
    }
 }