我的日常

登录/注册
您现在的位置:论坛 盖世程序员(我猜到了开头 却没有猜到结局) 运维优化 > java项目JS跨域问题解决方案
总共48087条微博

动态微博

查看: 2107|回复: 0

java项目JS跨域问题解决方案

[复制链接]
admin    

1244

主题

544

听众

1万

金钱

管理员

  • TA的每日心情

    2021-2-2 11:21
  • 签到天数: 36 天

    [LV.5]常住居民I

    管理员

    跳转到指定楼层
    楼主
    发表于 2015-07-01 15:28:21 |只看该作者 |倒序浏览
            项目大致是这样的 一个SSO统一认证 三个子项目 ,采用单点登录的方式实现各个科目无缝隙跳转。由于之前4个项目都是放在一个tomcat下,也就共用一个端口,所以不存在跨域的问题。  
          
           功能需求:为了实现统一调用SSO的昵称以及积分等级(实时性比较强)

           由于 tomcat下放的项目有点多,导致时不时内存溢出,所以最终把SSO搬出来、放到了另外一个tomcat下、这就导致了项目之间端口不一致了。

    一、首先说一下什么是跨域
          我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题。跨域问题是由于javascript语言安全限制中的同源策略造成的。简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合。


    以上发现 也就是说  只有协议、域名、端口三者完全相同jQuery才会视为不是跨域名的。
    二、解决jQuery跨域名操作对象的方法
    首先前台要引入jquery插件
    1. function getUserInfo(){
    2.          $.ajax({
    3.         type: "get",
    4.         async: false,
    5.         url: ssoURL+"userServlet?type=userInfo",
    6.         dataType: "jsonp",
    7.         jsonp: "jsoncallback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
    8.         jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
    9.         success: function(json){
    10.      //组织 并展示 json数据
    11.         },
    12.         error: function(){
    13.            
    14.         }
    15.     });
    16. }
    复制代码

    JAV后台代码实现:
    1. public void getUserInfo(HttpServletResponse response,TeacherEntity teacherEntity,HttpServletRequest request){
    2.                 response.setContentType("text/plain;charset=UTF-8");
    3.                 response.setHeader("Access-Control-Allow-Origin", "*");
    4.                 response.setHeader("Access-Control-Allow-Origin", "GET, POST");
    5.              String callbackName = (String) request.getParameter("jsoncallback");
    6.                 PrintWriter out = null;
    7.                 try {
    8.             JSONObject obj = new JSONObject();
    9.             obj.put("nickname", "admin");
    10.             obj.put("points", "12");
    11.             obj.put("messageCount", "4");
    12.                     String renderStr = callbackName+"("+obj.toString()+")";
    13.                          out = response.getWriter();
    14.                          out.write(renderStr);
    15.                 }catch (Exception e) {
    16.                         e.printStackTrace();
    17.                 } finally {
    18.                         out.close();
    19.                 }
    20.         }
    复制代码






    科帮网 1、本主题所有言论和图片纯属会员个人意见,与本社区立场无关
    2、本站所有主题由该帖子作者发表,该帖子作者与科帮网享有帖子相关版权
    3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和科帮网的同意
    4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
    5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
    6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
    7、科帮网管理员和版主有权不事先通知发贴者而删除本文


    JAVA爱好者①群:JAVA爱好者① JAVA爱好者②群:JAVA爱好者② JAVA爱好者③ : JAVA爱好者③

    快速回复
    您需要登录后才可以回帖 登录 | 立即注册

       

    关闭

    站长推荐上一条 /1 下一条

    发布主题 快速回复 返回列表 联系我们 官方QQ群 科帮网手机客户端
    快速回复 返回顶部 返回列表