123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- package com.kmall.common.security.session;
- import com.kmall.common.Global;
- import com.kmall.common.utils.ServletUtils;
- import com.kmall.common.utils.redis.JedisUtil;
- import org.apache.shiro.session.Session;
- import org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import javax.servlet.http.HttpServletRequest;
- import java.io.Serializable;
- /**
- * 自定义授权会话管理类
- *
- * @author zhuliyun
- */
- public class JedisSessionDAO extends EnterpriseCacheSessionDAO {
- private Logger logger = LoggerFactory.getLogger(getClass());
- private String sessionKeyPrefix = "shiro_session_";
- // session 在redis过期时间是30分钟30*60
- private static int expireTime = 1800;
- // 创建session,保存到数据库
- @Override
- protected Serializable doCreate(Session session) {
- Serializable sessionId = super.doCreate(session);
- logger.debug("创建session:{}", session.getId().toString());
- HttpServletRequest request = ServletUtils.getRequest();
- if (request != null) {
- String uri = request.getServletPath();
- // 如果是静态文件,则不创建SESSION
- if (ServletUtils.isStaticFile(uri)) {
- return null;
- }
- }
- JedisUtil.setObject(sessionKeyPrefix + session.getId().toString(), session, expireTime);
- return sessionId;
- }
- // 获取session
- @Override
- protected Session doReadSession(Serializable sessionId) {
- logger.debug("获取session:{}", sessionId);
- // 先从缓存中获取session,如果没有再去数据库中获取
- Session session = (Session) JedisUtil.getObject(sessionKeyPrefix + sessionId.toString());
- return session;
- }
- // 更新session的最后一次访问时间
- @Override
- protected void doUpdate(Session session) {
- // super.doUpdate(session);
- logger.debug("获取session:{}", session.getId());
- String key = sessionKeyPrefix + session.getId().toString();
- HttpServletRequest request = ServletUtils.getRequest();
- if (request != null) {
- String uri = request.getServletPath();
- // 如果是静态文件,则不更新SESSION
- if (ServletUtils.isStaticFile(uri)) {
- return;
- }
- // 手动控制不更新SESSION
- if (Global.NO.equals(request.getParameter("updateSession"))) {
- return;
- }
- }
- if (null == JedisUtil.getObject(key)) {
- return;
- }
- JedisUtil.expire(key, expireTime);
- }
- // 删除session
- @Override
- protected void doDelete(Session session) {
- if (session == null || session.getId() == null) {
- return;
- }
- logger.debug("删除session:{}", session.getId());
- // super.doDelete(session);
- JedisUtil.del(sessionKeyPrefix + session.getId().toString());
- }
- public String getSessionKeyPrefix() {
- return sessionKeyPrefix;
- }
- public void setSessionKeyPrefix(String sessionKeyPrefix) {
- this.sessionKeyPrefix = sessionKeyPrefix;
- }
- public static int getExpireTime() {
- return expireTime;
- }
- public static void setExpireTime(int expireTime) {
- JedisSessionDAO.expireTime = expireTime;
- }
- }
|