首先还是看接口文档关于通过token获取用户信息的说明,如下图所示。
看了说明文档我们便知道该怎么做了,在taotao-sso-interface工程的UserService接口类中添加一个接口,如下图所示。
添加的接口代码如下:
//通过token获取用户信息
TaotaoResult getUserByToken(String token);
下面我们到UserServiceImpl类中实现getUserByToken方法,如下图所示。
实现代码如下:
@Override
public TaotaoResult getUserByToken(String token) {
String json = jedisClient.get(USER_SESSION + ":" + token);
if(StringUtils.isBlank(json)){
return TaotaoResult.build(400, "token已过期!");
}
//如果我们直接把json返回的话,由于字符串中的"在redis中是有特殊意义的,因此
//"会被转义,这不是我们想要的结果,我们想要的结果是不带转义符的字符串,因此我们
//需要先把json转换成对象,然后把对象返回。
TbUser user = JSON.parseObject(json, TbUser.class);
//我们每访问一次该token,如果该token还没过期,我们便需要更新token的值,再把token恢复
//到原来的最大值
jedisClient.expire(USER_SESSION+":"+token, SESSION_EXPIRE);
//返回结果
return TaotaoResult.ok(user);
}
Service层写完后,我们再来完成Controller层,在UserController中添加一个接口,如下图所示。
代码如下;
@RequestMapping(value = "/user/token/{token}",method = RequestMethod.GET)
@ResponseBody
public TaotaoResult getUserByToken(@PathVariable String token){
TaotaoResult result = userService.getUserByToken(token);
return result;
}
现在我们开始测试,由于在服务中添加了接口,因此我们需要重新打包taotao-sso工程到本地maven仓库,然后我们依次启动taotao-sso和taotao-sso-web工程。我们在地址栏输入http://localhost:8088/user/token/511767e4-7799-4202-a7ec-393e9b4c47f9进行访问(token的值根据你的实际情况来写),可以看到token已过期,这是由于现在距离我上次登录已经很久了,因此显示token过期了。
现在我重新登录下,方法就是再发送下登录请求,如下图所示,可以看到返回一个新的token信息,我们就用这个新的token来测试获取用户信息。
我们使用新的token来测试,访问地址http://localhost:8088/user/token/ba9bb30f-1a61-4b61-9931-6b94d1aeefdf,结果如下图所示,发现正常返回了用户的信息。