From e86e561c3768cef17a4f75fd62b0cd5e0508f8ed Mon Sep 17 00:00:00 2001 From: ziin Date: Tue, 16 Sep 2025 16:54:19 +0800 Subject: [PATCH] =?UTF-8?q?1.=E8=AE=BE=E7=BD=AE=E7=94=A8=E6=88=B7=E7=99=BB?= =?UTF-8?q?=E5=BD=95=20Token=20=E5=88=B0=E6=9C=9F=E6=97=B6=E9=97=B4?= =?UTF-8?q?=E4=B8=BA=E7=A7=9F=E6=88=B7=E5=AF=B9=E5=BA=94=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=88=B0=E6=9C=9F=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Interceptor/TokenInterceptor.java | 76 +++++++++---------- .../config/SaTokenConfigure.java | 7 +- .../model/entity/SystemTenant.java | 16 ++++ .../service/impl/LoginService.java | 21 +++++ .../yupi/springbootinit/utils/DateUtils.java | 17 +++++ 5 files changed, 95 insertions(+), 42 deletions(-) create mode 100644 src/main/java/com/yupi/springbootinit/utils/DateUtils.java diff --git a/src/main/java/com/yupi/springbootinit/Interceptor/TokenInterceptor.java b/src/main/java/com/yupi/springbootinit/Interceptor/TokenInterceptor.java index bf27853..4644820 100644 --- a/src/main/java/com/yupi/springbootinit/Interceptor/TokenInterceptor.java +++ b/src/main/java/com/yupi/springbootinit/Interceptor/TokenInterceptor.java @@ -1,38 +1,38 @@ -package com.yupi.springbootinit.Interceptor; - -import cn.dev33.satoken.stp.StpUtil; - -import org.springframework.web.servlet.HandlerInterceptor; -import org.springframework.web.servlet.ModelAndView; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -/** - * 自定义拦截器(token续期 和 token定期刷新) - */ -public class TokenInterceptor implements HandlerInterceptor { - - @Override - 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("Access-Control-Allow-Origin", (request).getHeader("Origin")); - response.setHeader("Access-Control-Allow-Credentials", "true"); - response.setHeader("Referrer-Policy","no-referrer"); - response.setContentType("application/json"); - response.setCharacterEncoding("UTF-8"); - // 登录校验 -- 拦截所有请求,只有登录后才可以访问 - StpUtil.checkLogin(); - String tokenValue = StpUtil.getTokenValue(); - StpUtil.renewTimeout(tokenValue,259200); - return true; - } - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception { - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - } -} \ No newline at end of file +//package com.yupi.springbootinit.Interceptor; +// +//import cn.dev33.satoken.stp.StpUtil; +// +//import org.springframework.web.servlet.HandlerInterceptor; +//import org.springframework.web.servlet.ModelAndView; +// +//import javax.servlet.http.HttpServletRequest; +//import javax.servlet.http.HttpServletResponse; +// +///** +// * 自定义拦截器(token续期 和 token定期刷新) +// */ +//public class TokenInterceptor implements HandlerInterceptor { +// +// @Override +// 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("Access-Control-Allow-Origin", (request).getHeader("Origin")); +// response.setHeader("Access-Control-Allow-Credentials", "true"); +// response.setHeader("Referrer-Policy","no-referrer"); +// response.setContentType("application/json"); +// response.setCharacterEncoding("UTF-8"); +// // 登录校验 -- 拦截所有请求,只有登录后才可以访问 +// StpUtil.checkLogin(); +// String tokenValue = StpUtil.getTokenValue(); +// StpUtil.renewTimeout(tokenValue,259200); +// return true; +// } +// +// @Override +// public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception { +// } +// +// @Override +// public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { +// } +//} \ No newline at end of file diff --git a/src/main/java/com/yupi/springbootinit/config/SaTokenConfigure.java b/src/main/java/com/yupi/springbootinit/config/SaTokenConfigure.java index 9a27fcd..6057fb1 100644 --- a/src/main/java/com/yupi/springbootinit/config/SaTokenConfigure.java +++ b/src/main/java/com/yupi/springbootinit/config/SaTokenConfigure.java @@ -5,7 +5,6 @@ import cn.dev33.satoken.interceptor.SaInterceptor; import cn.dev33.satoken.router.SaHttpMethod; import cn.dev33.satoken.router.SaRouter; import cn.dev33.satoken.stp.StpUtil; -import com.yupi.springbootinit.Interceptor.TokenInterceptor; import lombok.extern.slf4j.Slf4j; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -24,9 +23,9 @@ public class SaTokenConfigure implements WebMvcConfigurer { registry.addInterceptor(new SaInterceptor(handle -> StpUtil.checkLogin())) .addPathPatterns("/**") .excludePathPatterns(getExcludePaths()); - registry.addInterceptor(new TokenInterceptor()) - .addPathPatterns("/**") - .excludePathPatterns(getExcludePaths()); +// registry.addInterceptor(new TokenInterceptor()) +// .addPathPatterns("/**") +// .excludePathPatterns(getExcludePaths()); } diff --git a/src/main/java/com/yupi/springbootinit/model/entity/SystemTenant.java b/src/main/java/com/yupi/springbootinit/model/entity/SystemTenant.java index 06ca90d..69ea5dc 100644 --- a/src/main/java/com/yupi/springbootinit/model/entity/SystemTenant.java +++ b/src/main/java/com/yupi/springbootinit/model/entity/SystemTenant.java @@ -6,6 +6,8 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; + +import java.time.LocalDateTime; import java.util.Date; import lombok.Data; @@ -84,6 +86,20 @@ public class SystemTenant { @ApiModelProperty(value="过期时间") private Date expireTime; + /** + * ai过期时间 + */ + @TableField(value = "expire_time") + @ApiModelProperty(value="ai过期时间") + private Date aiExpireTime; + + /** + * 大哥过期时间 + */ + @TableField(value = "expire_time") + @ApiModelProperty(value="大哥过期时间") + private Date brotherExpireTime; + /** * 账号数量 */ diff --git a/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java b/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java index 2438722..08cb751 100644 --- a/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java +++ b/src/main/java/com/yupi/springbootinit/service/impl/LoginService.java @@ -2,14 +2,18 @@ package com.yupi.springbootinit.service.impl; import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.date.DateUtil; import com.yupi.springbootinit.common.ErrorCode; 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.entity.SystemTenant; import com.yupi.springbootinit.model.entity.SystemUsers; import com.yupi.springbootinit.model.enums.CommonStatusEnum; import com.yupi.springbootinit.model.enums.LoginSceneEnum; import com.yupi.springbootinit.model.vo.user.SystemUsersVO; import com.yupi.springbootinit.service.SystemUsersService; +import com.yupi.springbootinit.utils.DateUtils; import com.yupi.springbootinit.utils.RedisUtils; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -19,6 +23,8 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalDate; +import java.time.ZoneId; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -52,6 +58,9 @@ public class LoginService { @Resource private RedisUtils redisUtils; + @Resource + private SystemTenantMapper tenantMapper; + /** * 统一登录入口 * @@ -85,9 +94,21 @@ public class LoginService { rabbitAdmin.declareBinding(binding); } } + SystemTenant systemTenant = tenantMapper.selectById(user.getTenantId()); // 5. Sa-Token 登录 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. 封装返回数据 SystemUsersVO vo = new SystemUsersVO(); diff --git a/src/main/java/com/yupi/springbootinit/utils/DateUtils.java b/src/main/java/com/yupi/springbootinit/utils/DateUtils.java new file mode 100644 index 0000000..72032a4 --- /dev/null +++ b/src/main/java/com/yupi/springbootinit/utils/DateUtils.java @@ -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); + } +}