1. 程式人生 > >淘淘商城之安全退出(後臺程式碼的實現和前臺如何讓更改請求詳解)

淘淘商城之安全退出(後臺程式碼的實現和前臺如何讓更改請求詳解)

使用者登陸到安全退出的完整邏輯

  1. 使用者登陸,生成一個token,將這個token作為key將查詢到的user物件存入redis快取中,並將token存到Cookie中。如果之前沒有要跳轉的路徑跳轉到商城首頁,如果有,跳轉到之前的路徑。首頁根據Cookie中的token到快取中去查詢,得到對應的資訊(如使用者名稱)
  2. 使用者點選退出之後,根據Cookie中的token來刪除redis中對應的資料,即刪除在Redis中的key為token使用者資訊。
  3. 重新整理頁面

請求方法

GET

URL

http://sso.taotao.com/user/logout/{token}

引數

token //使用者登入憑證

callback//jsonp回撥方法

引數說明

可選引數callback:如果有此引數表示此方法為jsonp請求,需要支援jsonp。

返回值

{

status200

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---------------------------------------------------------------------------------