• jQuery-跨域问题的处理


    调用登录接口时,后端一般会在调用登录接口成功后,在response中设置cookie,之后前端的每次请求都会自动地在请求头上加上后端设置好的cookie,这对前端来说是透明的。

    当登录接口与登录后调用的接口域名不同时,会出现跨域问题。处理跨域问题的方式如下:

    前端部分:

    1 <script>
    2     $(function () {
    3         $.ajaxSetup({crossDomain: true, xhrFields: {withCredentials: true}});
    4     });
    5 </script>

    或是直接在请求中加上crossDomain:true和xhrFields

     1 $.ajax({
     2     type: 'POST',
     3     url: base + "/farmer/farmeruser/login",
     4     data: pack(data),
     5     contentType: 'application/json',
     6     xhrFields: {
     7         withCredentials: true
     8     },
     9     crossDomain: true,
    10     success: function (data) {
    11         
    12     },
    13     error: function () {
    14 
    15     }
    16 })

    后端部分(Java):

     1 private boolean recharge(HttpServletRequest request, HttpServletResponse response) throws Exception {
     2     String url = request.getHeader("Origin");
     3     logger.debug("Access-Control-Allow-Origin:" + url);
     4     if (!StringUtils.isEmpty(url)) {
     5         String val = response.getHeader("Access-Control-Allow-Origin");
     6         if (StringUtils.isEmpty(val)) {
     7             response.addHeader("Access-Control-Allow-Origin", url);
     8             response.addHeader("Access-Control-Allow-Credentials", "true");
     9         }
    10     }
    11     return true;
    12 }

    首先获取Allow-Origin的值,然后判断是否为空,若为空,则给resoponse加上Allow-Orgin的值,即为请求处的url,同时设置Allow-Credentials(允许证件)的值为true即可。

    这样设置cookie便可以成功,之后的请求都会自动加上cookie。

  • 相关阅读:
    Sql Server 2008 为开发带来的新特性
    MSMQ 与ESB
    面向服务架构(SOA)和企业服务总线(ESB)
    IBM网站 构建您的SOA 系列文章
    Visual Studio 2008 和 .NET Framework 3.5 Training Kit
    模式与实践 系列发布WCF Security Guidance 1.0
    跟NHibernate之夏一起学习NHibernate
    ORACLE一些不常用的脚本
    ORACLE已建表能否创建分区
    Access数据库问题锦集
  • 原文地址:https://www.cnblogs.com/luoyihao/p/11968181.html
Copyright © 2020-2023  润新知