Jsonp

1、当用户登录成功后,在cookie中有token信息。

2、从cookie中取token根据token查询用户信息。

3、把用户名展示到首页。

方案一:在Controller中取cookie中的token数据,调用sso服务查询用户信息。

方案二:当页面加载完成后使用js取token的数据,使用ajax请求查询用户信息。

问题:服务接口在sso系统中。Sso.e3.com(localhost:8088),在首页显示用户名称,首页的域名是www.e3.com(localhost:8082),使用ajax请求跨域了。

Js不可以跨域请求数据。

什么是跨域:

1、域名不同

2、域名相同端口不同。

解决js的跨域问题可以使用jsonp。

Jsonp不是新技术,跨域的解决方案。使用js的特性绕过跨域请求。Js可以跨域加载js文件。

js代码

$.ajax({
			url : "http://localhost:8088/user/token/" + _ticket,
			dataType : "jsonp",
			type : "GET",
			success : function(data){
				if(data.status == 200){
					var username = data.data.username;
					var html = username;
					$("#loginbar").html(html);
				}
			}
		});

后台代码

package com.shi.sso.controller;

import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.converter.json.MappingJacksonValue;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import com.shi.sso.service.TokenService;
import com.shi.util.AJAXResult;
import com.shi.util.JsonUtils;

/**
 * 
 * @author: SHF
 * @date: 2018年3月29日 下午8:09:24
 * @Description:
 */
@Controller
public class TokenController {

	@Autowired
	private TokenService tokenService;
	
	/**
	 * 把结果封装成一个jsonp数据
	 * @param token
	 * @param callback jsonp函数名
	 * @return
	 * @throws Exception
	 * "application/json;charset=utf-8"
	 */
	
	
	/* ---------方法一----------  */
	/*@RequestMapping(value="/user/token/{token}",produces=MediaType.APPLICATION_JSON_UTF8_VALUE)
	@ResponseBody
	private String getUserByToken(@PathVariable String token,String callback) throws Exception{
		AJAXResult result= tokenService.getUserByToken(token);
		//在相应之前,判断是否为jsonp请求
		if(StringUtils.isNotBlank(callback)){
			//把结果封装成一个js语句响应
			return callback+"("+JsonUtils.objectToJson(result)+");";
		}
		return JsonUtils.objectToJson(result);
	}*/
	
	/* ---------方法二----------  */
	@RequestMapping(value="/user/token/{token}")
	@ResponseBody
	private Object getUserByToken(@PathVariable String token,String callback) throws Exception{
		AJAXResult result= tokenService.getUserByToken(token);
		//在相应之前,判断是否为jsonp请求
		if(StringUtils.isNotBlank(callback)){
			//把结果封装成一个js语句响应
			MappingJacksonValue mappingJacksonValue=new MappingJacksonValue(result);
			mappingJacksonValue.setJsonpFunction(callback);
			return mappingJacksonValue;
		}
		return result;
	}
	
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Swagger2+springboot-mvc+hibernate-validator 可视化视图加参数校验

    我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite...

    用户5927264
  • ES-使用springData来操作es 原

    用户5927264
  • Feign的使用

    用户5927264
  • SpringBoot入门建站全系列(十二)Spring Security使用token做认证

    Spring 是一个非常流行和成功的 Java 应用开发框架。Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决...

    品茗IT
  • 从0到1开发测试平台(十三)前后端接口token验证

    前端登录成功之后,token会保存在浏览器的本地缓存里面,然后每次接口访问我们都会在header里面带上这个token,后台拿到这个token会去做用户认证,认...

    cctester
  • SpringBoot中集成jwt实现前后端分离的token验证机制

    Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安...

    你好戴先生
  • SpringBoot开发案例之整合mail队列进阶篇

    上一篇文章,我们为了解决实际场景中遇到的问题,使得其更像一个安全高效的邮件服务平台,我们引入了LinkedBlockingQueue队列对邮件发送进行流量削锋、...

    小柒2012
  • SpringBoot开发案例之整合mail队列进阶篇

    前情提要 上一篇文章,我们为了解决实际场景中遇到的问题,使得其更像一个安全高效的邮件服务平台,我们引入了LinkedBlockingQueue队列对邮件发送进行...

    小柒2012
  • SpringBoot开发案例之整合mail队列进阶篇

    上一篇文章,我们为了解决实际场景中遇到的问题,使得其更像一个安全高效的邮件服务平台,我们引入了LinkedBlockingQueue队列对邮件发送进行流量削锋、...

    小柒2012
  • springmvc 文件下载 VS resteasy 文件上传下载

    浏览器输入: http://localhost:8080/evaluate/downloadPathExportTemplate

    MickyInvQ

扫码关注云+社区

领取腾讯云代金券