1.设置用户登录 Token 到期时间为租户对应权限到期时间

This commit is contained in:
2025-09-16 16:54:19 +08:00
parent 22a1a8b963
commit e86e561c37
5 changed files with 95 additions and 42 deletions

View File

@@ -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 {
} // }
} //}

View File

@@ -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());
} }

View File

@@ -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;
/** /**
* 账号数量 * 账号数量
*/ */

View File

@@ -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();

View 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);
}
}