淘淘商城之安全退出(後臺程式碼的實現和前臺如何讓更改請求詳解)
阿新 • • 發佈:2019-01-27
使用者登陸到安全退出的完整邏輯
- 使用者登陸,生成一個token,將這個token作為key將查詢到的user物件存入redis快取中,並將token存到Cookie中。如果之前沒有要跳轉的路徑跳轉到商城首頁,如果有,跳轉到之前的路徑。首頁根據Cookie中的token到快取中去查詢,得到對應的資訊(如使用者名稱)
- 使用者點選退出之後,根據Cookie中的token來刪除redis中對應的資料,即刪除在Redis中的key為token使用者資訊。
- 重新整理頁面
請求方法 |
GET |
URL |
http://sso.taotao.com/user/logout/{token} |
引數 |
token //使用者登入憑證 callback//jsonp回撥方法 |
引數說明 |
可選引數callback:如果有此引數表示此方法為jsonp請求,需要支援jsonp。 |
返回值 |
{ status: 200 msg: "OK" data: "" } |
一.在service層中新增userlogout介面
TaotaoResult userLogout(String token);
二.實現介面
@Override public TaotaoResult userLogout(String token) { jedisClient.del(REDIS_USER_SESSION_KEY + ":" + token); return TaotaoResult.ok(); }
三.conreoller
@RequestMapping("/logout/{token}") @ResponseBody public Object UserLogin(@PathVariable String token, String callback){ TaotaoResult result = null; try { result = userService.userLogout(token); } catch (Exception e) { e.printStackTrace(); result = TaotaoResult.build(500, ExceptionUtil.getStackTrace(e)); } if (StringUtils.isBlank(callback)) { return "login"; //退出登入跳轉至登入介面 }else { MappingJacksonValue mappingJackValue = new MappingJacksonValue(result); mappingJackValue.setJsonpFunction(callback); return mappingJackValue; } }
四.前端js的改變
var TT = TAOTAO = {
checkLogin : function(){
var _ticket = $.cookie("TT_TOKEN");
if(!_ticket){
return ;
}
$.ajax({
url : "http://localhost:8084/user/token/" + _ticket,
dataType : "jsonp",
type : "GET",
success : function(data){
if(data.status == 200){
var username = data.data.username;
var html = username + ",歡迎來到BY商城!<a class=\"link-logout\" id=\"logout\" >[退出]</a>";
$("#loginbar").html(html);
$("#logout").click(function () {
$.ajax({
url : "http://localhost:8084/user/logout/" + _ticket,
dataType : "jsonp",
type : "GET",
error: function(request) { //失敗
alert("登出失敗!");
},
success: function(data) { //成功
if (data.status == 200){
alert("登出成功!");
window.location.href="http://localhost:8082"
}
}
});
});
}
}
});
}
}
$(function(){
// 檢視是否已經登入,如果已經登入查詢登入資訊
TT.checkLogin();
});
----------------------------------------------------------------------------------END---------------------------------------------------------------------------------