package com.civism.shiro; import com.civism.constants.SsoConstants; import com.civism.dao.RedisClient; import com.civism.utils.SerializeUtil; import com.civism.vo.UserInfo; import org.apache.shiro.SecurityUtils; import org.apache.shiro.web.filter.authc.UserFilter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.annotation.Resource; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.Serializable; /** * @author star * @date 2018/6/28 上午10:58 */ public class ExpireTokenUserFilter extends UserFilter { private static final Logger logger = LoggerFactory.getLogger(ExpireTokenUserFilter.class); @Resource private RedisClient redisClient; @Override protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { try { Serializable id = SecurityUtils.getSubject().getSession(false).getId(); byte[] value = redisClient.get((String) id); if (value != null) { UserInfo userInfo = SerializeUtil.deserialize(value, UserInfo.class); redisClient.expire((String) id, userInfo.getExpireTime() == null ? SsoConstants.DEFAULT_LOGIN_EXPIRE : userInfo.getExpireTime()); } } catch (Exception e) { logger.error("error ", e); } return true; } }