session使用

可以配置session的实现方式和过期时间,session目前提供3种实现方式,可以根据实际情况进行选择。

  • 本地session方式,默认
  • redis方式
  • caffeine方式
  • 自定义实现(3.5.1新增)

[!question] 3.5版本开始,由caffeine代替guava实现方式,3.5之前版本请使用guava

本地session方式

HttpServletRequest中的session

session类型配置:

wueasy :
  gateway:
    session: #session配置
      type: local #类型 local 本地session 默认,redis ,caffeine
      tokenWriteCookie: false  #token写入cookie, true 是, false 不是,默认false

session过期时间配置:

默认30分钟,单位秒

server :
  servlet:
    session:
      cookie:
        http-only: true
      timeout: 1800
      tracking-modes: cookie

redis方式

使用redis方式保存session信息,支持分布式环境。

session类型配置:

wueasy :
  gateway:
    session: #session配置
      type: redis #类型 local 本地session 默认,redis ,caffeine

session过期时间配置:

默认30分钟,单位秒

wueasy :
  gateway:
    session:
      timeout: 1800

配置redis连接信息:

1.3.0开始支持此配置,之前版本请参考spring boot redis配置。

wueasy :
  data:
    redis: #redis配置
      session:
        database : 1 #数据库索引(默认为0)
        host : 127.0.0.1 #服务器地址
        port : 6379 #服务器连接端口
        password : 123456  #服务器连接密码(默认为空)
        pool : #连接池配置
          maxIdle : 8 # 连接池中的最大空闲连接,默认值也是8。
          minIdle : 0 #连接池中的最小空闲连接,默认值也是0。
          maxTotal : 2000 # 如果赋值为-1,则表示不限制;如果pool已经分配了maxActive个jedis实例,则此时pool的状态为exhausted(耗尽)。
          maxWaitMillis : 1000 # 等待可用连接的最大时间,单位毫秒,默认值为-1,表示永不超时。如果超过等待时间,则直接抛出JedisConnectionException
        timeout : 3000 #连接超时时间(毫秒)

caffeine方式

使用caffeine缓存方式保存session信息。

session类型配置:

wueasy :
  gateway:
    session: #session配置
      type: caffeine #类型 local 本地session 默认,redis ,caffeine

session过期时间配置:

默认30分钟,单位秒

wueasy :
  gateway:
    session:
      timeout: 1800

自定义实现方式

自定义实现session需要基础接口类com.wueasy.gateway.security.service.SessionService,并实现接口里面的所有方法

session类型配置:

wueasy :
  gateway:
    session: #session配置
      type: custom #类型

参考类

/**
 * 自定义session实现
 * @author: fallsea
 * @version 1.0
 */
@Service(GatewayConstants.SESSION_SERVICE_NAME_CUSTOM)
public class CustomSessionServiceImpl implements SessionService{

    @Override
    public void addSession(Session<?> session) {
        // TODO Auto-generated method stub

    }

    @Override
    public void updateSession(Session<?> session) {
        // TODO Auto-generated method stub

    }

    @Override
    public Session<?> getSession(String token) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Session<?> getRealSession(String token) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void removeSession(String token) {
        // TODO Auto-generated method stub

    }

    @Override
    public Session<?> createSession() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Session<?> getSession() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Session<?> getRealSession() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public Set<String> queryUserTokenList(String userId) {
        // TODO Auto-generated method stub
        return null;
    }
}

获取session对象

可以通过SessionUtil工具,获取session服务接口,从而对session进行操作。

SessionService sessionService = SessionUtil.getSessionService();

支持以下方法。

/**
 * session服务类
 * @author: fallsea
 * @version 1.0
 */
public interface SessionService {

    /**
     * 增加session
     * @author: fallsea
     * @param session
     */
    void addSession(Session session);

    /**
     * 更新session
     * @author: fallsea
     * @param session
     */
    void updateSession(Session session);

    /**
     * 获取session
     * @author: fallsea
     * @param token
     * @return
     */
    Session<?> getSession(String token);


    /**
     * 获取真是的session(不需要处理缓存)
     * @author: fallsea
     * @param token
     * @return
     */
    Session<?> getRealSession(String token);

    /**
     * 删除缓存信息
     * @author: fallsea
     * @param token
     */
    void removeSession(String token);

    /**
     * 创建session
     * @author: fallsea
     * @return
     */
    Session<?> createSession();


    /**
     * 获取session
     * @author: fallsea
     * @return
     */
    Session<?> getSession();


    /**
     * 获取真是的session(不需要处理缓存)
     * @author: fallsea
     * @return
     */
    Session<?> getRealSession();

}
Copyright © wueasy.com 2017-2020 all right reserved,powered by Gitbook未经允许,禁止以任何形式传播 修订时间: 2020-07-07

results matching ""

    No results matching ""