用户登陆到安全退出的完整逻辑
- 用户登陆,生成一个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。
|
示例 |
http://sso.taotao.com/user/logout/fe5cb546aeb3ce1bf37abcb08a40493e
|
返回值 | { 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---------------------------------------------------------------------------------