TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
项目大致是这样的 一个SSO统一认证 三个子项目 ,采用单点登录的方式实现各个科目无缝隙跳转。由于之前4个项目都是放在一个tomcat下,也就共用一个端口,所以不存在跨域的问题。
功能需求:为了实现统一调用SSO的昵称以及积分等级(实时性比较强)
由于 tomcat下放的项目有点多,导致时不时内存溢出,所以最终把SSO搬出来、放到了另外一个tomcat下、这就导致了项目之间端口不一致了。
一、首先说一下什么是跨域
我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题。跨域问题是由于javascript语言安全限制中的同源策略造成的。简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合。
以上发现 也就是说 只有协议、域名、端口三者完全相同jQuery才会视为不是跨域名的。
二、解决jQuery跨域名操作对象的方法
首先前台要引入jquery插件
- function getUserInfo(){
- $.ajax({
- type: "get",
- async: false,
- url: ssoURL+"userServlet?type=userInfo",
- dataType: "jsonp",
- jsonp: "jsoncallback",//传递给请求处理程序或页面的,用以获得jsonp回调函数名的参数名(一般默认为:callback)
- jsonpCallback:"success_jsonpCallback",//自定义的jsonp回调函数名称,默认为jQuery自动生成的随机函数名,也可以写"?",jQuery会自动为你处理数据
- success: function(json){
- //组织 并展示 json数据
- },
- error: function(){
-
- }
- });
- }
复制代码
JAV后台代码实现:- public void getUserInfo(HttpServletResponse response,TeacherEntity teacherEntity,HttpServletRequest request){
- response.setContentType("text/plain;charset=UTF-8");
- response.setHeader("Access-Control-Allow-Origin", "*");
- response.setHeader("Access-Control-Allow-Origin", "GET, POST");
- String callbackName = (String) request.getParameter("jsoncallback");
- PrintWriter out = null;
- try {
- JSONObject obj = new JSONObject();
- obj.put("nickname", "admin");
- obj.put("points", "12");
- obj.put("messageCount", "4");
- String renderStr = callbackName+"("+obj.toString()+")";
- out = response.getWriter();
- out.write(renderStr);
- }catch (Exception e) {
- e.printStackTrace();
- } finally {
- out.close();
- }
- }
复制代码
|
|