package com.baidu.disconf.web.web.auth.login.impl;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import com.baidu.disconf.web.service.user.bo.User;
import com.baidu.disconf.web.service.user.constant.UserConstant;
import com.baidu.disconf.web.service.user.dto.Visitor;
import com.baidu.disconf.web.web.auth.constant.LoginConstant;
import com.baidu.disconf.web.web.auth.login.RedisLogin;
import com.baidu.ub.common.commons.ThreadContext;
import com.github.knightliao.apollo.redis.RedisCacheManager;
import com.github.knightliao.apollo.utils.web.CookieUtils;
/**
* @author liaoqiqi
* @version 2014-2-4
*/
public class RedisLoginImpl implements RedisLogin {
@Autowired
private RedisCacheManager redisCacheMgr;
/**
* 获取Redis上的User Key
*
* @param baiduId
*
* @return
*/
private String getRedisKey(String baiduId) {
return baiduId + UserConstant.USER_KEY;
}
/**
* 校验Redis是否登录
*/
@Override
public Visitor isLogin(HttpServletRequest request) {
String xId = CookieUtils.getCookieValue(request, LoginConstant.XONE_COOKIE_NAME_STRING);
if (xId != null) {
Visitor visitor = (Visitor) redisCacheMgr.get(this.getRedisKey(xId));
//
// 登录了
//
if (visitor != null) {
return visitor;
} else {
return null;
}
} else {
return null;
}
}
/**
* 登录
*/
@Override
public void login(HttpServletRequest request, User user, int expireTime) {
Visitor visitor = new Visitor();
//
//
//
visitor.setId(user.getId());
visitor.setLoginUserId(user.getId());
visitor.setLoginUserName(user.getName());
visitor.setRoleId(user.getRoleId());
visitor.setAppIds(user.getOwnApps());
//
// 更新session
//
updateSessionVisitor(request.getSession(), visitor);
//
// 更新Redis数据
//
updateRedisVisitor(visitor, request, expireTime);
}
/**
* @param visitor
*/
private void updateRedisVisitor(Visitor visitor, HttpServletRequest request, int expireTime) {
String xcookieName = CookieUtils.getCookieValue(request, LoginConstant.XONE_COOKIE_NAME_STRING);
// 更新Redis数据
if (xcookieName != null) {
// 更新
if (visitor != null) {
redisCacheMgr.put(this.getRedisKey(xcookieName), expireTime, visitor);
} else {
// 删除
redisCacheMgr.remove(this.getRedisKey(xcookieName));
}
}
}
/**
* 更新Session中的Userid
*
* @param session
* @param visitor
*/
public void updateSessionVisitor(HttpSession session, Visitor visitor) {
if (visitor != null) {
// 更新
session.setAttribute(UserConstant.USER_KEY, visitor);
} else {
// 删除
session.removeAttribute(UserConstant.USER_KEY);
}
ThreadContext.putSessionVisitor(visitor);
}
/**
* 登出
*/
@Override
public void logout(HttpServletRequest request) {
// 更新session
updateSessionVisitor(request.getSession(), null);
// 更新redis
updateRedisVisitor(null, request, 0);
}
}