Java 跨域操作

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

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

1.第一种办法

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

<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操作后会进行处理,返回正确格式的报文头。

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;
    }
 }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值