1. 程式人生 > >學習淘淘商城第八十九課(單點登入之通過token獲取使用者資訊)

學習淘淘商城第八十九課(單點登入之通過token獲取使用者資訊)

        首先還是看介面文件關於通過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,結果如下圖所示,發現正常返回了使用者的資訊。