package core.framework.api.module; import core.framework.impl.module.ModuleContext; import core.framework.impl.redis.RedisImpl; import core.framework.impl.web.session.LocalSessionStore; import core.framework.impl.web.session.RedisSessionStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.time.Duration; /** * @author neo */ public final class SessionConfig { private final Logger logger = LoggerFactory.getLogger(SessionConfig.class); private final ModuleContext context; SessionConfig(ModuleContext context) { this.context = context; } public void timeout(Duration timeout) { context.httpServer.siteManager.sessionManager.timeout(timeout); } public void cookie(String name, String domain) { context.httpServer.siteManager.sessionManager.cookie(name, domain); } public void local() { logger.info("create local session provider"); LocalSessionStore sessionStore = new LocalSessionStore(); if (!context.isTest()) { context.backgroundTask().scheduleWithFixedDelay(sessionStore::cleanup, Duration.ofMinutes(30)); } context.httpServer.siteManager.sessionManager.sessionStore(sessionStore); } public void redis(String host) { if (context.isTest()) { local(); } else { logger.info("create redis session provider, host={}", host); RedisImpl redis = new RedisImpl(); redis.host(host); redis.pool.name("redis-session"); context.backgroundTask().scheduleWithFixedDelay(redis.pool::refresh, Duration.ofMinutes(5)); context.shutdownHook.add(redis::close); context.httpServer.siteManager.sessionManager.sessionStore(new RedisSessionStore(redis)); } } }