首页>代码>Springboot开发的精简博客系统 >/noteblogv4-master/src/main/java/me/wuwenbin/noteblogv4/config/application/NBSession.java
package me.wuwenbin.noteblogv4.config.application; import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.StrUtil; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import lombok.extern.slf4j.Slf4j; import me.wuwenbin.noteblogv4.model.entity.permission.NBSysUser; import me.wuwenbin.noteblogv4.util.NBUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.time.LocalDateTime; import static java.lang.Boolean.FALSE; import static java.time.LocalDateTime.now; /** * created by Wuwenbin on 2018/2/7 at 20:56 * @author wuwenbin */ @Slf4j @Data @Builder @AllArgsConstructor @NoArgsConstructor public class NBSession implements Serializable { @Builder.Default private String id = IdUtil.randomUUID(); private String host; @Builder.Default private LocalDateTime startTimestamp = now(); @Builder.Default private LocalDateTime lastAccessTime = now(); @Builder.Default private long timeout = DEFAULT_TIMEOUT_MILLS; @Builder.Default private LocalDateTime expireTimestamp = now().plusSeconds(DEFAULT_TIMEOUT_MILLS / 1000); @Builder.Default private boolean expired = FALSE; private NBSysUser sessionUser; public static final long DEFAULT_TIMEOUT_MILLS = 30 * 60 * 1000; private static HttpServletRequest getRequest() { ServletRequestAttributes ra = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); assert ra != null; return ra.getRequest(); } /** * 更新session */ public void update() { String info = "update session for id:[{}], at [{}] by url:[{}] with ip:[{}]"; log.info(StrUtil.format(info, this.getId(), LocalDateTime.now(), getRequest().getRequestURL()), NBUtils.getRemoteAddress(getRequest())); this.lastAccessTime = now(); this.expireTimestamp = lastAccessTime.plusSeconds(getTimeout() / 1000); if (!host.equals(NBUtils.getRemoteAddress(getRequest()))) { log.info("ip变动,存在非法访问情况"); this.expired = true; } } /** * 注销session,即把session变为过期状态 */ public void destroy() { String info = "destroy session for id:[{}], at [{}]"; log.info(StrUtil.format(info, this.getId(), LocalDateTime.now())); this.expired = true; } public boolean isExpired() { if (this.expired) { return true; } long timeout = getTimeout(); if (timeout >= 0) { LocalDateTime lastAccessTime = getLastAccessTime(); if (lastAccessTime == null) { throw new IllegalStateException("最后访问时间为空"); } LocalDateTime expire = getExpireTimestamp(); boolean isExpire = LocalDateTime.now().isAfter(lastAccessTime.plusSeconds(timeout / 1000)); log.info("当前时间:{},最后访问时间:{},过期时间:{},session 是否过期:{}", LocalDateTime.now(), lastAccessTime, expire, isExpire); if (isExpire) { this.expired = true; } return isExpire; } this.expired = true; return true; } }
最近下载更多
yayacui LV2
10月28日
angaochong LV5
10月23日
y1214435276 LV9
9月26日
Peny_ZH LV5
9月22日
murphy LV7
7月3日
xunxia LV7
6月29日
来一杯西瓜冰咩 LV6
5月13日
qiangmin1223 LV12
4月24日
xiaokang1 LV10
4月23日
zhouenyi LV6
3月14日
最近浏览更多
haomc052829 LV2
昨天
cpk159 LV8
11月28日
krispeng LV13
11月20日
xianyu091012 LV4
11月18日
12347658 LV1
11月13日
微信网友_6797029372219392 LV2
10月29日
yayacui LV2
10月28日
喜欢夜雨吗 LV4
10月25日
angaochong LV5
10月23日
栾庆浩
10月23日
暂无贡献等级