1.设置用户登录 Token 到期时间为租户对应权限到期时间
This commit is contained in:
@@ -1,38 +1,38 @@
|
|||||||
package com.yupi.springbootinit.Interceptor;
|
//package com.yupi.springbootinit.Interceptor;
|
||||||
|
//
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
//import cn.dev33.satoken.stp.StpUtil;
|
||||||
|
//
|
||||||
import org.springframework.web.servlet.HandlerInterceptor;
|
//import org.springframework.web.servlet.HandlerInterceptor;
|
||||||
import org.springframework.web.servlet.ModelAndView;
|
//import org.springframework.web.servlet.ModelAndView;
|
||||||
|
//
|
||||||
import javax.servlet.http.HttpServletRequest;
|
//import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
//import javax.servlet.http.HttpServletResponse;
|
||||||
|
//
|
||||||
/**
|
///**
|
||||||
* 自定义拦截器(token续期 和 token定期刷新)
|
// * 自定义拦截器(token续期 和 token定期刷新)
|
||||||
*/
|
// */
|
||||||
public class TokenInterceptor implements HandlerInterceptor {
|
//public class TokenInterceptor implements HandlerInterceptor {
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
|
// public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler){
|
||||||
response.setHeader( "Content-Security-Policy" , "default-src 'self'; script-src 'self'; frame-ancestors 'self'");
|
// response.setHeader( "Content-Security-Policy" , "default-src 'self'; script-src 'self'; frame-ancestors 'self'");
|
||||||
response.setHeader("Access-Control-Allow-Origin", (request).getHeader("Origin"));
|
// response.setHeader("Access-Control-Allow-Origin", (request).getHeader("Origin"));
|
||||||
response.setHeader("Access-Control-Allow-Credentials", "true");
|
// response.setHeader("Access-Control-Allow-Credentials", "true");
|
||||||
response.setHeader("Referrer-Policy","no-referrer");
|
// response.setHeader("Referrer-Policy","no-referrer");
|
||||||
response.setContentType("application/json");
|
// response.setContentType("application/json");
|
||||||
response.setCharacterEncoding("UTF-8");
|
// response.setCharacterEncoding("UTF-8");
|
||||||
// 登录校验 -- 拦截所有请求,只有登录后才可以访问
|
// // 登录校验 -- 拦截所有请求,只有登录后才可以访问
|
||||||
StpUtil.checkLogin();
|
// StpUtil.checkLogin();
|
||||||
String tokenValue = StpUtil.getTokenValue();
|
// String tokenValue = StpUtil.getTokenValue();
|
||||||
StpUtil.renewTimeout(tokenValue,259200);
|
// StpUtil.renewTimeout(tokenValue,259200);
|
||||||
return true;
|
// return true;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {
|
// public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
@Override
|
// @Override
|
||||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
// public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
@@ -5,7 +5,6 @@ import cn.dev33.satoken.interceptor.SaInterceptor;
|
|||||||
import cn.dev33.satoken.router.SaHttpMethod;
|
import cn.dev33.satoken.router.SaHttpMethod;
|
||||||
import cn.dev33.satoken.router.SaRouter;
|
import cn.dev33.satoken.router.SaRouter;
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import com.yupi.springbootinit.Interceptor.TokenInterceptor;
|
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
@@ -24,9 +23,9 @@ public class SaTokenConfigure implements WebMvcConfigurer {
|
|||||||
registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
|
registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin()))
|
||||||
.addPathPatterns("/**")
|
.addPathPatterns("/**")
|
||||||
.excludePathPatterns(getExcludePaths());
|
.excludePathPatterns(getExcludePaths());
|
||||||
registry.addInterceptor(new TokenInterceptor())
|
// registry.addInterceptor(new TokenInterceptor())
|
||||||
.addPathPatterns("/**")
|
// .addPathPatterns("/**")
|
||||||
.excludePathPatterns(getExcludePaths());
|
// .excludePathPatterns(getExcludePaths());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId;
|
|||||||
import com.baomidou.mybatisplus.annotation.TableName;
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import io.swagger.annotations.ApiModel;
|
import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@@ -84,6 +86,20 @@ public class SystemTenant {
|
|||||||
@ApiModelProperty(value="过期时间")
|
@ApiModelProperty(value="过期时间")
|
||||||
private Date expireTime;
|
private Date expireTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ai过期时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "expire_time")
|
||||||
|
@ApiModelProperty(value="ai过期时间")
|
||||||
|
private Date aiExpireTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 大哥过期时间
|
||||||
|
*/
|
||||||
|
@TableField(value = "expire_time")
|
||||||
|
@ApiModelProperty(value="大哥过期时间")
|
||||||
|
private Date brotherExpireTime;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 账号数量
|
* 账号数量
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -2,14 +2,18 @@ package com.yupi.springbootinit.service.impl;
|
|||||||
|
|
||||||
import cn.dev33.satoken.stp.StpUtil;
|
import cn.dev33.satoken.stp.StpUtil;
|
||||||
import cn.hutool.core.bean.BeanUtil;
|
import cn.hutool.core.bean.BeanUtil;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
import com.yupi.springbootinit.common.ErrorCode;
|
import com.yupi.springbootinit.common.ErrorCode;
|
||||||
import com.yupi.springbootinit.exception.BusinessException;
|
import com.yupi.springbootinit.exception.BusinessException;
|
||||||
|
import com.yupi.springbootinit.mapper.SystemTenantMapper;
|
||||||
import com.yupi.springbootinit.model.dto.user.SystemUsersDTO;
|
import com.yupi.springbootinit.model.dto.user.SystemUsersDTO;
|
||||||
|
import com.yupi.springbootinit.model.entity.SystemTenant;
|
||||||
import com.yupi.springbootinit.model.entity.SystemUsers;
|
import com.yupi.springbootinit.model.entity.SystemUsers;
|
||||||
import com.yupi.springbootinit.model.enums.CommonStatusEnum;
|
import com.yupi.springbootinit.model.enums.CommonStatusEnum;
|
||||||
import com.yupi.springbootinit.model.enums.LoginSceneEnum;
|
import com.yupi.springbootinit.model.enums.LoginSceneEnum;
|
||||||
import com.yupi.springbootinit.model.vo.user.SystemUsersVO;
|
import com.yupi.springbootinit.model.vo.user.SystemUsersVO;
|
||||||
import com.yupi.springbootinit.service.SystemUsersService;
|
import com.yupi.springbootinit.service.SystemUsersService;
|
||||||
|
import com.yupi.springbootinit.utils.DateUtils;
|
||||||
import com.yupi.springbootinit.utils.RedisUtils;
|
import com.yupi.springbootinit.utils.RedisUtils;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@@ -19,6 +23,8 @@ import org.springframework.data.redis.core.RedisTemplate;
|
|||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
@@ -52,6 +58,9 @@ public class LoginService {
|
|||||||
@Resource
|
@Resource
|
||||||
private RedisUtils redisUtils;
|
private RedisUtils redisUtils;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SystemTenantMapper tenantMapper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统一登录入口
|
* 统一登录入口
|
||||||
*
|
*
|
||||||
@@ -85,9 +94,21 @@ public class LoginService {
|
|||||||
rabbitAdmin.declareBinding(binding);
|
rabbitAdmin.declareBinding(binding);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SystemTenant systemTenant = tenantMapper.selectById(user.getTenantId());
|
||||||
|
|
||||||
// 5. Sa-Token 登录
|
// 5. Sa-Token 登录
|
||||||
StpUtil.login(user.getId(), scene.getSaMode());
|
StpUtil.login(user.getId(), scene.getSaMode());
|
||||||
|
switch (scene) {
|
||||||
|
case AI_CHAT:
|
||||||
|
StpUtil.renewTimeout(DateUtils.dateBetween(systemTenant.getAiExpireTime(),DateUtil.date()));
|
||||||
|
break;
|
||||||
|
case HOST:
|
||||||
|
StpUtil.renewTimeout(DateUtils.dateBetween(systemTenant.getExpireTime(),DateUtil.date()));
|
||||||
|
break;
|
||||||
|
case BIG_BROTHER:
|
||||||
|
StpUtil.renewTimeout(DateUtils.dateBetween(systemTenant.getBrotherExpireTime(),DateUtil.date()));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// 6. 封装返回数据
|
// 6. 封装返回数据
|
||||||
SystemUsersVO vo = new SystemUsersVO();
|
SystemUsersVO vo = new SystemUsersVO();
|
||||||
|
|||||||
17
src/main/java/com/yupi/springbootinit/utils/DateUtils.java
Normal file
17
src/main/java/com/yupi/springbootinit/utils/DateUtils.java
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
package com.yupi.springbootinit.utils;
|
||||||
|
|
||||||
|
import cn.hutool.core.date.DateUnit;
|
||||||
|
import cn.hutool.core.date.DateUtil;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @author: ziin
|
||||||
|
* @date: 2025/9/16 16:31
|
||||||
|
*/
|
||||||
|
public class DateUtils {
|
||||||
|
|
||||||
|
public static Long dateBetween(Date date1, Date date2) {
|
||||||
|
return DateUtil.between(date1, date2, DateUnit.SECOND);
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user