學習淘淘商城第八十九課(單點登入之通過token獲取使用者資訊)
阿新 • • 發佈:2019-01-04
首先還是看介面文件關於通過token獲取使用者資訊的說明,如下圖所示。
看了說明文件我們便知道該怎麼做了,在taotao-sso-interface工程的UserService介面類中新增一個介面,如下圖所示。
新增的介面程式碼如下:
//通過token獲取使用者資訊
TaotaoResult getUserByToken(String token);
下面我們到UserServiceImpl類中實現getUserByToken方法,如下圖所示。
實現程式碼如下:
Service層寫完後,我們再來完成Controller層,在UserController中新增一個介面,如下圖所示。@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); }
程式碼如下;
現在我們開始測試,由於在服務中添加了介面,因此我們需要重新打包taotao-sso工程到本地maven倉庫,然後我們依次啟動taotao-sso和taotao-sso-web工程。我們在位址列輸入http://localhost:8088/user/token/511767e4-7799-4202-a7ec-393e9b4c47f9進行訪問(token的值根據你的實際情況來寫),可以看到token已過期,這是由於現在距離我上次登入已經很久了,因此顯示token過期了。@RequestMapping(value = "/user/token/{token}",method = RequestMethod.GET) @ResponseBody public TaotaoResult getUserByToken(@PathVariable String token){ TaotaoResult result = userService.getUserByToken(token); return result; }
現在我重新登入下,方法就是再發送下登入請求,如下圖所示,可以看到返回一個新的token資訊,我們就用這個新的token來測試獲取使用者資訊。
我們使用新的token來測試,訪問地址http://localhost:8088/user/token/ba9bb30f-1a61-4b61-9931-6b94d1aeefdf,結果如下圖所示,發現正常返回了使用者的資訊。