parent
4456d15182
commit
57c8f34c3b
@ -1,244 +0,0 @@ |
||||
package com.gitee.sop.gatewaycommon.session; |
||||
|
||||
import org.springframework.util.Assert; |
||||
|
||||
import javax.servlet.ServletContext; |
||||
import javax.servlet.http.HttpSession; |
||||
import javax.servlet.http.HttpSessionBindingEvent; |
||||
import javax.servlet.http.HttpSessionBindingListener; |
||||
import javax.servlet.http.HttpSessionContext; |
||||
import java.io.Serializable; |
||||
import java.util.Enumeration; |
||||
import java.util.HashMap; |
||||
import java.util.Iterator; |
||||
import java.util.LinkedHashMap; |
||||
import java.util.Map; |
||||
import java.util.UUID; |
||||
import java.util.Vector; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
@SuppressWarnings("deprecation") |
||||
public class ApiHttpSession implements HttpSession, Serializable { |
||||
private static final long serialVersionUID = 946272038219216222L; |
||||
private static final String ATTRIBUTE_NAME_MUST_NOT_BE_NULL = "Attribute name must not be null"; |
||||
|
||||
private final String id; |
||||
|
||||
private final long creationTime = System.currentTimeMillis(); |
||||
|
||||
private int maxInactiveInterval; |
||||
|
||||
private long lastAccessedTime = System.currentTimeMillis(); |
||||
|
||||
private final transient ServletContext servletContext; |
||||
|
||||
private final transient Map<String, Object> attributes = new LinkedHashMap<>(); |
||||
|
||||
private boolean invalid = false; |
||||
|
||||
private boolean isNew = true; |
||||
|
||||
/** |
||||
* Create a new ApiHttpSession |
||||
*/ |
||||
public ApiHttpSession() { |
||||
this(null); |
||||
} |
||||
|
||||
/** |
||||
* Create a new ApiHttpSession. |
||||
* |
||||
* @param servletContext the ServletContext that the session runs in |
||||
*/ |
||||
public ApiHttpSession(ServletContext servletContext) { |
||||
this(servletContext, null); |
||||
} |
||||
|
||||
/** |
||||
* Create a new ApiHttpSession. |
||||
* |
||||
* @param servletContext the ServletContext that the session runs in |
||||
* @param id a unique identifier for this session |
||||
*/ |
||||
public ApiHttpSession(ServletContext servletContext, String id) { |
||||
this.servletContext = servletContext; |
||||
this.id = this.buildId(id); |
||||
} |
||||
|
||||
protected String buildId(String id) { |
||||
return (id != null ? id : UUID.randomUUID().toString().replace("-", "").toUpperCase()); |
||||
} |
||||
|
||||
@Override |
||||
public long getCreationTime() { |
||||
return this.creationTime; |
||||
} |
||||
|
||||
@Override |
||||
public String getId() { |
||||
return this.id; |
||||
} |
||||
|
||||
public void access() { |
||||
this.lastAccessedTime = System.currentTimeMillis(); |
||||
this.isNew = false; |
||||
} |
||||
|
||||
@Override |
||||
public long getLastAccessedTime() { |
||||
return this.lastAccessedTime; |
||||
} |
||||
|
||||
@Override |
||||
public ServletContext getServletContext() { |
||||
return this.servletContext; |
||||
} |
||||
|
||||
@Override |
||||
public void setMaxInactiveInterval(int interval) { |
||||
this.maxInactiveInterval = interval; |
||||
} |
||||
|
||||
@Override |
||||
public int getMaxInactiveInterval() { |
||||
return this.maxInactiveInterval; |
||||
} |
||||
|
||||
/** |
||||
* @return 返回HttpSessionContext。已废弃不能使用 |
||||
* @deprecated 已废弃不能使用 |
||||
*/ |
||||
@Override |
||||
@Deprecated |
||||
public HttpSessionContext getSessionContext() { |
||||
throw new UnsupportedOperationException("getSessionContext"); |
||||
} |
||||
|
||||
@Override |
||||
public Object getAttribute(String name) { |
||||
Assert.notNull(name, ATTRIBUTE_NAME_MUST_NOT_BE_NULL); |
||||
return this.attributes.get(name); |
||||
} |
||||
|
||||
@Override |
||||
public Object getValue(String name) { |
||||
return getAttribute(name); |
||||
} |
||||
|
||||
@Override |
||||
public Enumeration<String> getAttributeNames() { |
||||
return new Vector<String>(this.attributes.keySet()).elements(); |
||||
} |
||||
|
||||
@Override |
||||
public String[] getValueNames() { |
||||
return this.attributes.keySet().toArray(new String[this.attributes.size()]); |
||||
} |
||||
|
||||
@Override |
||||
public void setAttribute(String name, Object value) { |
||||
Assert.notNull(name, ATTRIBUTE_NAME_MUST_NOT_BE_NULL); |
||||
if (value != null) { |
||||
this.attributes.put(name, value); |
||||
if (value instanceof HttpSessionBindingListener) { |
||||
((HttpSessionBindingListener) value).valueBound(new HttpSessionBindingEvent(this, name, value)); |
||||
} |
||||
} else { |
||||
removeAttribute(name); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void putValue(String name, Object value) { |
||||
setAttribute(name, value); |
||||
} |
||||
|
||||
@Override |
||||
public void removeAttribute(String name) { |
||||
Assert.notNull(name, ATTRIBUTE_NAME_MUST_NOT_BE_NULL); |
||||
Object value = this.attributes.remove(name); |
||||
if (value instanceof HttpSessionBindingListener) { |
||||
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value)); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void removeValue(String name) { |
||||
removeAttribute(name); |
||||
} |
||||
|
||||
/** |
||||
* Clear all of this session's attributes. |
||||
*/ |
||||
public void clearAttributes() { |
||||
for (Iterator<Map.Entry<String, Object>> it = this.attributes.entrySet().iterator(); it.hasNext(); ) { |
||||
Map.Entry<String, Object> entry = it.next(); |
||||
String name = entry.getKey(); |
||||
Object value = entry.getValue(); |
||||
it.remove(); |
||||
if (value instanceof HttpSessionBindingListener) { |
||||
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value)); |
||||
} |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public void invalidate() { |
||||
this.invalid = true; |
||||
clearAttributes(); |
||||
} |
||||
|
||||
public boolean isInvalid() { |
||||
return this.invalid; |
||||
} |
||||
|
||||
public void setNew(boolean value) { |
||||
this.isNew = value; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isNew() { |
||||
return this.isNew; |
||||
} |
||||
|
||||
/** |
||||
* Serialize the attributes of this session into an object that can be |
||||
* turned into a byte array with standard Java serialization. |
||||
* |
||||
* @return a representation of this session's serialized state |
||||
*/ |
||||
public Serializable serializeState() { |
||||
HashMap<String, Serializable> state = new HashMap<>(16); |
||||
for (Iterator<Map.Entry<String, Object>> it = this.attributes.entrySet().iterator(); it.hasNext(); ) { |
||||
Map.Entry<String, Object> entry = it.next(); |
||||
String name = entry.getKey(); |
||||
Object value = entry.getValue(); |
||||
it.remove(); |
||||
if (value instanceof Serializable) { |
||||
state.put(name, (Serializable) value); |
||||
} else { |
||||
// Not serializable... Servlet containers usually automatically
|
||||
// unbind the attribute in this case.
|
||||
if (value instanceof HttpSessionBindingListener) { |
||||
((HttpSessionBindingListener) value).valueUnbound(new HttpSessionBindingEvent(this, name, value)); |
||||
} |
||||
} |
||||
} |
||||
return state; |
||||
} |
||||
|
||||
/** |
||||
* Deserialize the attributes of this session from a state object created by |
||||
* {@link #serializeState()}. |
||||
* |
||||
* @param state a representation of this session's serialized state |
||||
*/ |
||||
@SuppressWarnings("unchecked") |
||||
public void deserializeState(Serializable state) { |
||||
Assert.isTrue(state instanceof Map, "Serialized state needs to be of type [java.util.Map]"); |
||||
this.attributes.putAll((Map<String, Object>) state); |
||||
} |
||||
|
||||
} |
@ -1,30 +0,0 @@ |
||||
package com.gitee.sop.gatewaycommon.session; |
||||
|
||||
import org.springframework.data.redis.connection.DefaultStringRedisConnection; |
||||
import org.springframework.data.redis.connection.RedisConnection; |
||||
import org.springframework.data.redis.connection.RedisConnectionFactory; |
||||
import org.springframework.data.redis.core.RedisTemplate; |
||||
import org.springframework.data.redis.serializer.RedisSerializer; |
||||
import org.springframework.data.redis.serializer.StringRedisSerializer; |
||||
|
||||
/** |
||||
* @author tanghc |
||||
*/ |
||||
public class ApiRedisTemplate extends RedisTemplate<String, Object> { |
||||
public ApiRedisTemplate() { |
||||
RedisSerializer<String> stringSerializer = new StringRedisSerializer(); |
||||
setKeySerializer(stringSerializer); |
||||
setHashKeySerializer(stringSerializer); |
||||
} |
||||
|
||||
public ApiRedisTemplate(RedisConnectionFactory connectionFactory) { |
||||
this(); |
||||
setConnectionFactory(connectionFactory); |
||||
afterPropertiesSet(); |
||||
} |
||||
|
||||
@Override |
||||
protected RedisConnection preProcessConnection(RedisConnection connection, boolean existingConnection) { |
||||
return new DefaultStringRedisConnection(connection); |
||||
} |
||||
} |
@ -1,93 +0,0 @@ |
||||
package com.gitee.sop.gatewaycommon.session; |
||||
|
||||
import com.gitee.sop.gatewaycommon.message.ErrorEnum; |
||||
import com.google.common.cache.CacheBuilder; |
||||
import com.google.common.cache.CacheLoader; |
||||
import com.google.common.cache.LoadingCache; |
||||
import org.slf4j.Logger; |
||||
import org.slf4j.LoggerFactory; |
||||
|
||||
import javax.servlet.ServletContext; |
||||
import javax.servlet.http.HttpSession; |
||||
import java.util.concurrent.TimeUnit; |
||||
|
||||
/** |
||||
* session管理,默认存放的是{@link ApiHttpSession}。采用谷歌guava缓存实现。 |
||||
* |
||||
* @author tanghc |
||||
*/ |
||||
public class ApiSessionManager implements SessionManager { |
||||
private static Logger logger = LoggerFactory.getLogger(ApiSessionManager.class); |
||||
|
||||
private int sessionTimeout = 20; |
||||
|
||||
private LoadingCache<String, HttpSession> cache; |
||||
|
||||
public ApiSessionManager() { |
||||
cache = this.buildCache(); |
||||
} |
||||
|
||||
@Override |
||||
public HttpSession getSession(String sessionId) { |
||||
if (sessionId == null) { |
||||
return this.createSession(sessionId); |
||||
} |
||||
try { |
||||
return cache.get(sessionId); |
||||
} catch (Exception e) { |
||||
logger.error(e.getMessage(), e); |
||||
throw ErrorEnum.ISP_UNKNOWN_ERROR.getErrorMeta().getException(); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 创建一个session |
||||
* |
||||
* @param sessionId 传null将返回一个新session |
||||
* @return 返回session |
||||
*/ |
||||
protected HttpSession createSession(String sessionId) { |
||||
ServletContext servletContext = null; |
||||
HttpSession session = this.newSession(sessionId, servletContext); |
||||
session.setMaxInactiveInterval(getSessionTimeout()); |
||||
this.cache.put(session.getId(), session); |
||||
return session; |
||||
} |
||||
|
||||
/** |
||||
* 返回新的session实例 |
||||
* |
||||
* @param sessionId |
||||
* @param servletContext |
||||
* @return 返回session |
||||
*/ |
||||
protected HttpSession newSession(String sessionId, ServletContext servletContext) { |
||||
return new ApiHttpSession(servletContext, sessionId); |
||||
} |
||||
|
||||
protected LoadingCache<String, HttpSession> buildCache() { |
||||
return CacheBuilder.newBuilder().expireAfterAccess(getSessionTimeout(), TimeUnit.MINUTES) |
||||
.build(new CacheLoader<String, HttpSession>() { |
||||
// 找不到sessionId对应的HttpSession时,进入这个方法
|
||||
// 找不到就新建一个
|
||||
@Override |
||||
public HttpSession load(String sessionId) throws Exception { |
||||
return createSession(sessionId); |
||||
} |
||||
}); |
||||
} |
||||
|
||||
public void setSessionTimeout(int sessionTimeout) { |
||||
this.sessionTimeout = sessionTimeout; |
||||
} |
||||
|
||||
/** |
||||
* 过期时间,分钟,默认20分钟 |
||||
* |
||||
* @return 返回过期时间 |
||||
*/ |
||||
public int getSessionTimeout() { |
||||
return sessionTimeout; |
||||
} |
||||
|
||||
} |
@ -1,269 +0,0 @@ |
||||
package com.gitee.sop.gatewaycommon.session; |
||||
|
||||
import org.springframework.data.redis.core.RedisTemplate; |
||||
import org.springframework.util.Assert; |
||||
|
||||
import javax.servlet.ServletContext; |
||||
import javax.servlet.http.HttpSession; |
||||
import javax.servlet.http.HttpSessionContext; |
||||
import java.io.Serializable; |
||||
import java.util.Collections; |
||||
import java.util.Enumeration; |
||||
import java.util.HashSet; |
||||
import java.util.Set; |
||||
import java.util.UUID; |
||||
import java.util.concurrent.TimeUnit; |
||||
|
||||
/** |
||||
* RedisHttpSession |
||||
* |
||||
* @author tanghc |
||||
*/ |
||||
@SuppressWarnings("deprecation") |
||||
public class RedisHttpSession implements HttpSession, Serializable { |
||||
private static final long serialVersionUID = -8081963657251144855L; |
||||
|
||||
private static final int SEC60 = 60; |
||||
|
||||
private static final String SESSION_ATTR = "session_attr:"; |
||||
private static final String CREATION_TIME = "creationTime"; |
||||
private static final String LAST_ACCESSED_TIME = "lastAccessedTime"; |
||||
private static final String MAX_INACTIVE_INTERVAL = "maxInactiveInterval"; |
||||
|
||||
/** |
||||
* 存入redis的key |
||||
*/ |
||||
private String key; |
||||
|
||||
/** |
||||
* sessionId |
||||
*/ |
||||
private String id; |
||||
|
||||
private transient ServletContext servletContext; |
||||
|
||||
private transient RedisTemplate redisTemplate; |
||||
|
||||
private RedisHttpSession() { |
||||
} |
||||
|
||||
|
||||
protected static String buildId(String id) { |
||||
return (id != null ? id : UUID.randomUUID().toString().replace("-", "").toUpperCase()); |
||||
} |
||||
|
||||
public static String buildKey(String keyPrefix, String sessionId) { |
||||
Assert.notNull(keyPrefix, "sessionPrefix不能为null"); |
||||
return keyPrefix + sessionId; |
||||
} |
||||
|
||||
/** |
||||
* 创建新的session |
||||
* |
||||
* @param servletContext servletContext |
||||
* @param sessionId sessionId |
||||
* @param sessionTimeout 过期时间,单位秒 |
||||
* @param redisTemplate redis客户端 |
||||
* @param keyPrefix 存入的key前缀 |
||||
* @return 返回session |
||||
*/ |
||||
public static RedisHttpSession createNewSession(ServletContext servletContext, String sessionId, int sessionTimeout, RedisTemplate redisTemplate, String keyPrefix) { |
||||
Assert.notNull(redisTemplate, "redisTemplate can not null."); |
||||
Assert.notNull(sessionId, "sessionId can not null."); |
||||
Assert.notNull(keyPrefix, "keyPrefix can not null."); |
||||
RedisHttpSession redisHttpSession = new RedisHttpSession(); |
||||
redisHttpSession.setId(sessionId); |
||||
redisHttpSession.setKey(buildKey(keyPrefix, sessionId)); |
||||
redisHttpSession.setRedisTemplate(redisTemplate); |
||||
redisHttpSession.setServletContext(servletContext); |
||||
|
||||
long creationTime = System.currentTimeMillis(); |
||||
// 过期时间,分转换成秒
|
||||
int maxInactiveInterval = sessionTimeout * SEC60; |
||||
|
||||
redisHttpSession.setCreationTime(creationTime); |
||||
redisHttpSession.setLastAccessedTime(creationTime); |
||||
redisHttpSession.setMaxInactiveInterval(maxInactiveInterval); |
||||
|
||||
redisHttpSession.refresh(); |
||||
|
||||
return redisHttpSession; |
||||
} |
||||
|
||||
/** |
||||
* 创建已经存在的session,数据在redis里面 |
||||
* |
||||
* @param sessionId sessionId |
||||
* @param servletContext servletContext |
||||
* @param redisTemplate redis客户端 |
||||
* @param keyPrefix 存入的key前缀 |
||||
* @return 返回session |
||||
*/ |
||||
public static RedisHttpSession createExistSession(String sessionId, ServletContext servletContext, RedisTemplate redisTemplate, String keyPrefix) { |
||||
Assert.notNull(redisTemplate, "redisTemplate can not null."); |
||||
Assert.notNull(sessionId, "sessionId can not null."); |
||||
Assert.notNull(keyPrefix, "keyPrefix can not null."); |
||||
RedisHttpSession redisHttpSession = new RedisHttpSession(); |
||||
redisHttpSession.setId(sessionId); |
||||
redisHttpSession.setKey(buildKey(keyPrefix, sessionId)); |
||||
redisHttpSession.setRedisTemplate(redisTemplate); |
||||
redisHttpSession.setServletContext(servletContext); |
||||
|
||||
redisHttpSession.refresh(); |
||||
|
||||
return redisHttpSession; |
||||
} |
||||
|
||||
public void setId(String id) { |
||||
this.id = id; |
||||
} |
||||
|
||||
|
||||
public void setServletContext(ServletContext servletContext) { |
||||
this.servletContext = servletContext; |
||||
} |
||||
|
||||
public void setCreationTime(long creationTime) { |
||||
this.redisTemplate.opsForHash().put(key, CREATION_TIME, String.valueOf(creationTime)); |
||||
} |
||||
|
||||
@Override |
||||
public long getCreationTime() { |
||||
Object createTime = this.redisTemplate.opsForHash().get(key, CREATION_TIME); |
||||
return Long.valueOf(String.valueOf(createTime)); |
||||
} |
||||
|
||||
@Override |
||||
public String getId() { |
||||
return id; |
||||
} |
||||
|
||||
@Override |
||||
public long getLastAccessedTime() { |
||||
Object lastAccessedTime = this.redisTemplate.opsForHash().get(key, LAST_ACCESSED_TIME); |
||||
return Long.valueOf(String.valueOf(lastAccessedTime)); |
||||
} |
||||
|
||||
@Override |
||||
public ServletContext getServletContext() { |
||||
return servletContext; |
||||
} |
||||
|
||||
@Override |
||||
public void setMaxInactiveInterval(int interval) { |
||||
this.redisTemplate.opsForHash().put(key, MAX_INACTIVE_INTERVAL, String.valueOf(interval)); |
||||
} |
||||
|
||||
@Override |
||||
public int getMaxInactiveInterval() { |
||||
Object maxInactiveInterval = this.redisTemplate.opsForHash().get(key, MAX_INACTIVE_INTERVAL); |
||||
return Integer.valueOf(String.valueOf(maxInactiveInterval)); |
||||
} |
||||
|
||||
/** |
||||
* @return 返回HttpSessionContext。已废弃不能使用 |
||||
* @deprecated 已废弃,始终返回null |
||||
*/ |
||||
@Override |
||||
@Deprecated |
||||
public HttpSessionContext getSessionContext() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public Object getAttribute(String name) { |
||||
return this.redisTemplate.opsForHash().get(key, SESSION_ATTR + name); |
||||
} |
||||
|
||||
@Override |
||||
public Object getValue(String name) { |
||||
return getAttribute(name); |
||||
} |
||||
|
||||
@Override |
||||
public Enumeration<String> getAttributeNames() { |
||||
return Collections.enumeration(getAttributeKeys()); |
||||
} |
||||
|
||||
private Set<String> getAttributeKeys() { |
||||
Set keys = this.redisTemplate.opsForHash().keys(key); |
||||
Set<String> attrNames = new HashSet<>(); |
||||
for (Object key : keys) { |
||||
String k = String.valueOf(key); |
||||
if (k.startsWith(SESSION_ATTR)) { |
||||
attrNames.add(k.substring(SESSION_ATTR.length())); |
||||
} |
||||
} |
||||
return attrNames; |
||||
} |
||||
|
||||
|
||||
@Override |
||||
public String[] getValueNames() { |
||||
return getAttributeKeys().toArray(new String[0]); |
||||
} |
||||
|
||||
@Override |
||||
public void setAttribute(String name, Object value) { |
||||
this.redisTemplate.opsForHash().put(key, SESSION_ATTR + name, value); |
||||
} |
||||
|
||||
@Override |
||||
public void putValue(String name, Object value) { |
||||
setAttribute(name, value); |
||||
} |
||||
|
||||
@Override |
||||
public void removeAttribute(String name) { |
||||
this.redisTemplate.opsForHash().delete(key, name); |
||||
} |
||||
|
||||
@Override |
||||
public void removeValue(String name) { |
||||
removeAttribute(name); |
||||
} |
||||
|
||||
@Override |
||||
public void invalidate() { |
||||
this.redisTemplate.delete(key); |
||||
} |
||||
|
||||
@Override |
||||
public boolean isNew() { |
||||
return false; |
||||
} |
||||
|
||||
/** |
||||
* update expireTime,accessTime |
||||
*/ |
||||
public void refresh() { |
||||
// token更新过期时间
|
||||
this.redisTemplate.expire(key, getMaxInactiveInterval(), TimeUnit.SECONDS); |
||||
// 设置访问时间
|
||||
this.setLastAccessedTime(System.currentTimeMillis()); |
||||
} |
||||
|
||||
|
||||
public void setLastAccessedTime(long lastAccessedTime) { |
||||
this.redisTemplate.opsForHash().put(key, LAST_ACCESSED_TIME, String.valueOf(lastAccessedTime)); |
||||
} |
||||
|
||||
public String getKey() { |
||||
return key; |
||||
} |
||||
|
||||
public void setKey(String key) { |
||||
this.key = key; |
||||
} |
||||
|
||||
public boolean isInvalidated() { |
||||
return !this.redisTemplate.hasKey(key); |
||||
} |
||||
|
||||
|
||||
public void setRedisTemplate(RedisTemplate redisTemplate) { |
||||
this.redisTemplate = redisTemplate; |
||||
} |
||||
|
||||
|
||||
} |
@ -1,105 +0,0 @@ |
||||
package com.gitee.sop.gatewaycommon.session; |
||||
|
||||
import org.springframework.data.redis.core.RedisTemplate; |
||||
import org.springframework.util.Assert; |
||||
|
||||
import javax.servlet.ServletContext; |
||||
import javax.servlet.http.HttpSession; |
||||
import java.util.UUID; |
||||
|
||||
/** |
||||
* SessionManager的redis实现,使用redis管理session |
||||
* |
||||
* @author tanghc |
||||
*/ |
||||
public class RedisSessionManager implements SessionManager { |
||||
|
||||
private ApiRedisTemplate redisTemplate; |
||||
|
||||
/** |
||||
* 过期时间,30分钟 |
||||
*/ |
||||
private int sessionTimeout = 30; |
||||
/** |
||||
* 存入redis中key的前缀 |
||||
*/ |
||||
private String keyPrefix = "session:"; |
||||
|
||||
public RedisSessionManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) { |
||||
Assert.notNull(redisTemplate, "RedisSessionManager中的redisTemplate不能为null"); |
||||
this.redisTemplate = new ApiRedisTemplate(redisTemplate.getConnectionFactory()); |
||||
} |
||||
|
||||
@Override |
||||
public HttpSession getSession(String sessionId) { |
||||
return this.getSession(sessionId, this.keyPrefix); |
||||
} |
||||
|
||||
public HttpSession getSession(String sessionId, String keyPrefix) { |
||||
if (this.hasKey(sessionId)) { |
||||
return RedisHttpSession.createExistSession(sessionId, getServletContext(), redisTemplate, keyPrefix); |
||||
} else { |
||||
sessionId = this.buildSessionId(sessionId); |
||||
return RedisHttpSession.createNewSession(getServletContext(), sessionId, this.getSessionTimeout(), |
||||
redisTemplate, keyPrefix); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 构建sessionId |
||||
* |
||||
* @param id |
||||
* @return 返回sessionid |
||||
*/ |
||||
public String buildSessionId(String id) { |
||||
return (id != null ? id : UUID.randomUUID().toString().replace("-", "").toUpperCase()); |
||||
} |
||||
|
||||
public boolean hasKey(String sessionId) { |
||||
if (sessionId == null) { |
||||
return false; |
||||
} else { |
||||
String key = RedisHttpSession.buildKey(this.keyPrefix, sessionId); |
||||
return redisTemplate.hasKey(key); |
||||
} |
||||
} |
||||
|
||||
public ServletContext getServletContext() { |
||||
return null; |
||||
} |
||||
|
||||
public int getSessionTimeout() { |
||||
return sessionTimeout; |
||||
} |
||||
|
||||
/** |
||||
* 设置session过期时间,单位分钟 |
||||
* |
||||
* @param sessionTimeout |
||||
*/ |
||||
public void setSessionTimeout(int sessionTimeout) { |
||||
this.sessionTimeout = sessionTimeout; |
||||
} |
||||
|
||||
public ApiRedisTemplate getRedisTemplate() { |
||||
return redisTemplate; |
||||
} |
||||
|
||||
public void setRedisTemplate(ApiRedisTemplate redisTemplate) { |
||||
this.redisTemplate = redisTemplate; |
||||
} |
||||
|
||||
public String getKeyPrefix() { |
||||
return keyPrefix; |
||||
} |
||||
|
||||
/** |
||||
* 设置存入redis中key的前缀,默认为"session:" |
||||
* |
||||
* @param keyPrefix |
||||
*/ |
||||
public void setKeyPrefix(String keyPrefix) { |
||||
this.keyPrefix = keyPrefix; |
||||
} |
||||
|
||||
} |
@ -1,20 +0,0 @@ |
||||
package com.gitee.sop.gatewaycommon.session; |
||||
|
||||
import javax.servlet.http.HttpSession; |
||||
|
||||
/** |
||||
* session管理 |
||||
* |
||||
* @author tanghc |
||||
* |
||||
*/ |
||||
public interface SessionManager { |
||||
|
||||
/** |
||||
* 根据sessionId获取session |
||||
* |
||||
* @param sessionId 客户端传过来的sessionId,为null时创建一个新session |
||||
* @return 返回session |
||||
*/ |
||||
HttpSession getSession(String sessionId); |
||||
} |
Loading…
Reference in new issue