02 创建portal服务,获取存储在redis中用户信息并显示
上一节,我们完成了sso服务,这一节我们再创建一个服务去获取第一个服务存储在redis中的用户信息。
1、前提约束
- 完成sso服务
2、操作步骤
- 基于springboot创建一个web项目 portal,端口设置为8082
https://www.jianshu.com/p/de979f53ad80
注意:这里仅仅是为了提供一个提供一个页面,之所以也用springboot,纯粹是为了方便,因为两个项目用两个不同的方式实现是比较烦的,况且这也不是此时要我们关注的。 - 在项目/src/main/resources/static文件夹中引入jquery-1.10.2.js
- 在项目/src/main/resources/static文件夹中创建index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
</head>
<body>
<div id="welcome"></div>欢迎你!
<h2>Hello World!</h2>
</body>
<script type="text/javascript" src="jquery-1.10.2.js"></script>
<script type="text/javascript">
$(function(){
$.ajax({
data:{},
type:"get",
dataType:"jsonp",
url:"http://localhost:8081/getuser",
success:function (data) {
if(data.status=='200')
{
$("#welcome").html(data.data);
}
else
{
window.location.href="http://localhost:8081/index.html";
}
}
})
})
</script>
</html>
- 在net.wanho.controller.UserController.java文件中加入以下方法:
@GetMapping("/getuser")
public JSONObject doGet(HttpServletRequest req) throws Exception {
JSONObject jsonObject = new JSONObject();
//也可以采用这方式完成跨域
//resp.setHeader("Access-Control-Allow-Origin","http://localhost:8082");
String callback = req.getParameter("callback");
if(callback!=null&&!"".equals(callback.trim()))
{
//携带callback,请求一定是jsonp跨域请求
//从cookie当中获取token
String token = "";
Cookie[] cookies = req.getCookies();
for(Cookie cookie:cookies)
{
if("USER_TOKEN".equals(cookie.getName()))
{
token = cookie.getValue();
break;
}
}
if("".equals(token))
{
//直接跳转到登录页面
jsonObject.put("status",303);
jsonObject.put("data","cookie当中并未携带token");
return jsonObject;
}
}
Jedis jedis = new Jedis("192.168.100.192",6379);
String value = jedis.get(token);
jsonObject.put("status",200);
jsonObject.put("data",value);
return jsonObject;
}
- 测试
重新启动两个项目,先访问http://localhost:8081/index.html,点击登录,最终会跳转到http://localhost:8082/index.html,但是该8082的index.html页面会显示出“ali欢迎你”。
以上两节就是通过redis+cookie完成单点登录的过程,这种方案的关键在于域名相同的情况下,cookie的值会自动全部携带。如果域名不同,比如从taobao.com跨域到tmall.com,以这种方案就无法实现。