|
@@ -9,13 +9,18 @@ import javax.servlet.http.HttpServletRequest;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
|
+import com.jiayue.ssi.backenum.AuditType;
|
|
|
|
+import com.jiayue.ssi.backenum.BusinessStatus;
|
|
|
|
+import com.jiayue.ssi.backenum.BusinessType;
|
|
import com.jiayue.ssi.constant.CacheConstants;
|
|
import com.jiayue.ssi.constant.CacheConstants;
|
|
import com.jiayue.ssi.constant.Constants;
|
|
import com.jiayue.ssi.constant.Constants;
|
|
import com.jiayue.ssi.constant.LoginConstants;
|
|
import com.jiayue.ssi.constant.LoginConstants;
|
|
import com.jiayue.ssi.dto.UserVisitInfoDto;
|
|
import com.jiayue.ssi.dto.UserVisitInfoDto;
|
|
|
|
+import com.jiayue.ssi.entity.SysOperLog;
|
|
import com.jiayue.ssi.entity.SysPolicy;
|
|
import com.jiayue.ssi.entity.SysPolicy;
|
|
import com.jiayue.ssi.entity.SysUser;
|
|
import com.jiayue.ssi.entity.SysUser;
|
|
import com.jiayue.ssi.factory.LoginFactory;
|
|
import com.jiayue.ssi.factory.LoginFactory;
|
|
|
|
+import com.jiayue.ssi.factory.OperateLogFactory;
|
|
import com.jiayue.ssi.service.SysPolicyService;
|
|
import com.jiayue.ssi.service.SysPolicyService;
|
|
import com.jiayue.ssi.service.SysUserService;
|
|
import com.jiayue.ssi.service.SysUserService;
|
|
import com.jiayue.ssi.service.impl.UserServiceImpl;
|
|
import com.jiayue.ssi.service.impl.UserServiceImpl;
|
|
@@ -64,6 +69,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
|
SecurityContextHolder.getContext().getAuthentication();
|
|
SecurityContextHolder.getContext().getAuthentication();
|
|
String token = request.getHeader("Authorization");
|
|
String token = request.getHeader("Authorization");
|
|
if (!StringUtils.isEmpty(token)) {
|
|
if (!StringUtils.isEmpty(token)) {
|
|
|
|
+ String username = "";
|
|
try {
|
|
try {
|
|
Claims claims = jwtTokenUtil.getClaimsFromToken(token);
|
|
Claims claims = jwtTokenUtil.getClaimsFromToken(token);
|
|
if (claims==null){
|
|
if (claims==null){
|
|
@@ -72,7 +78,7 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
- String username = claims.getSubject();
|
|
|
|
|
|
+ username = claims.getSubject();
|
|
if (username != null) {
|
|
if (username != null) {
|
|
if (CacheConstants.LOGIN_TOKEN_MAP.get(username) == null) {
|
|
if (CacheConstants.LOGIN_TOKEN_MAP.get(username) == null) {
|
|
ResponseInfo.doResponse(response, "令牌无效,请重新登录!", 406);
|
|
ResponseInfo.doResponse(response, "令牌无效,请重新登录!", 406);
|
|
@@ -146,7 +152,6 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
|
}
|
|
}
|
|
catch (ExpiredJwtException expiredJwtException){
|
|
catch (ExpiredJwtException expiredJwtException){
|
|
Claims claims = expiredJwtException.getClaims();
|
|
Claims claims = expiredJwtException.getClaims();
|
|
- String username = claims.getSubject();
|
|
|
|
String cacheToken = CacheConstants.LOGIN_TOKEN_MAP.get(username);
|
|
String cacheToken = CacheConstants.LOGIN_TOKEN_MAP.get(username);
|
|
//内存token和当前token一致 说明是当前登陆用户访问
|
|
//内存token和当前token一致 说明是当前登陆用户访问
|
|
if (cacheToken!=null && !token.equals(cacheToken)) {
|
|
if (cacheToken!=null && !token.equals(cacheToken)) {
|
|
@@ -175,6 +180,27 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
|
|
SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
|
|
SysPolicy sysPolicy = sysPolicyService.getOne(new QueryWrapper<>());
|
|
Long expiration = sysPolicy.getInactiveLogout().longValue()*1000*60L;
|
|
Long expiration = sysPolicy.getInactiveLogout().longValue()*1000*60L;
|
|
if (System.currentTimeMillis()>lastOperTime+expiration){
|
|
if (System.currentTimeMillis()>lastOperTime+expiration){
|
|
|
|
+ SysOperLog operLog = new SysOperLog();
|
|
|
|
+ operLog.setStatus(BusinessStatus.FAIL.ordinal());
|
|
|
|
+ // 请求的地址
|
|
|
|
+ String ip = IPUtils.getIpAddr();
|
|
|
|
+ operLog.setOperIp(ip);
|
|
|
|
+ operLog.setOperUrl(org.apache.commons.lang3.StringUtils.substring(ServletUtils.getRequest().getRequestURI(), 0, 255));
|
|
|
|
+ operLog.setOperName(username);
|
|
|
|
+ // 设置请求方式
|
|
|
|
+ operLog.setRequestMethod(ServletUtils.getRequest().getMethod());
|
|
|
|
+ operLog.setCreateBy(username);
|
|
|
|
+ // 设置action动作
|
|
|
|
+ operLog.setBusinessType(BusinessType.CTO.ordinal());
|
|
|
|
+ // 设置标题
|
|
|
|
+ operLog.setTitle("连接超时");
|
|
|
|
+ // 操作描述
|
|
|
|
+ operLog.setOperdesc("连接超时");
|
|
|
|
+ // 审计类型
|
|
|
|
+ operLog.setAuditType(AuditType.SYS.ordinal());
|
|
|
|
+ // 保存数据库
|
|
|
|
+ OperateLogFactory.recordOper(operLog);
|
|
|
|
+
|
|
LocalCache.remove(CacheConstants.REACTIVE_KEY + token);
|
|
LocalCache.remove(CacheConstants.REACTIVE_KEY + token);
|
|
// 超出配置设定值则退出
|
|
// 超出配置设定值则退出
|
|
ResponseInfo.doResponse(response, "超出非活动时长退出!", 406);
|
|
ResponseInfo.doResponse(response, "超出非活动时长退出!", 406);
|