From 3712dead8ac4108cd3eadb712dada30623ab8b4d Mon Sep 17 00:00:00 2001 From: xlsea Date: Tue, 1 Apr 2025 10:30:11 +0800 Subject: [PATCH] =?UTF-8?q?feat(preview):=20=E6=96=B0=E5=A2=9E=20Gitee=20?= =?UTF-8?q?=E6=8E=88=E6=9D=83=E7=99=BB=E5=BD=95=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 2 +- .../web/controller/SystemUserController.java | 10 +++--- .../model/request/SystemAuthRequestVO.java | 18 ++++++++++ .../server/web/service/SystemUserService.java | 7 ++-- .../service/impl/SystemUserServiceImpl.java | 36 ++++++++++++++++++- 5 files changed, 63 insertions(+), 10 deletions(-) create mode 100644 snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SystemAuthRequestVO.java diff --git a/snail-job-server/snail-job-server-starter/src/main/resources/application.yml b/snail-job-server/snail-job-server-starter/src/main/resources/application.yml index 9ef73e0e5..417c630da 100644 --- a/snail-job-server/snail-job-server-starter/src/main/resources/application.yml +++ b/snail-job-server/snail-job-server-starter/src/main/resources/application.yml @@ -80,5 +80,5 @@ snail-job: retry-pull-page-size: 1000 # 拉取重试数据的每批次的大小 job-pull-page-size: 1000 # 拉取重试数据的每批次的大小 server-port: 17888 # 服务器端口 - log-storage: 7 # 日志保存时间(单位: day) + log-storage: 1 # 日志保存时间(单位: day) rpc-type: grpc diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/SystemUserController.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/SystemUserController.java index 3975c3958..f1e9734f5 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/SystemUserController.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/controller/SystemUserController.java @@ -5,10 +5,7 @@ import com.aizuda.snailjob.server.web.annotation.LoginRequired; import com.aizuda.snailjob.server.web.annotation.LoginUser; import com.aizuda.snailjob.server.web.annotation.RoleEnum; import com.aizuda.snailjob.server.web.model.base.PageResult; -import com.aizuda.snailjob.server.web.model.request.SystemUpdateUserPasswordRequestVO; -import com.aizuda.snailjob.server.web.model.request.SystemUserQueryVO; -import com.aizuda.snailjob.server.web.model.request.SystemUserRequestVO; -import com.aizuda.snailjob.server.web.model.request.UserSessionVO; +import com.aizuda.snailjob.server.web.model.request.*; import com.aizuda.snailjob.server.web.model.response.PermissionsResponseVO; import com.aizuda.snailjob.server.web.model.response.SystemUserResponseVO; import com.aizuda.snailjob.server.web.service.SystemUserService; @@ -36,6 +33,11 @@ public class SystemUserController { return systemUserService.login(requestVO); } + @PostMapping("/auth/login/token") + public SystemUserResponseVO loginToken(@RequestBody SystemAuthRequestVO requestVO){ + return systemUserService.loginByToken(requestVO); + } + @LoginRequired @GetMapping("/user/info") public SystemUserResponseVO getUserInfo(@LoginUser UserSessionVO systemUser) { diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SystemAuthRequestVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SystemAuthRequestVO.java new file mode 100644 index 000000000..13c264432 --- /dev/null +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SystemAuthRequestVO.java @@ -0,0 +1,18 @@ +package com.aizuda.snailjob.server.web.model.request; + +import jakarta.validation.constraints.NotBlank; +import lombok.Data; +import org.springframework.web.bind.annotation.PostMapping; + +/** + * @author opensnail + * @date 2022-03-05 + * @since 2.0 + */ +@Data +public class SystemAuthRequestVO { + + @NotBlank(message = "凭据不能为空", groups = PostMapping.class) + private String token; + +} diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/SystemUserService.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/SystemUserService.java index ca7bc8385..af484416d 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/SystemUserService.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/SystemUserService.java @@ -1,10 +1,7 @@ package com.aizuda.snailjob.server.web.service; import com.aizuda.snailjob.server.web.model.base.PageResult; -import com.aizuda.snailjob.server.web.model.request.SystemUpdateUserPasswordRequestVO; -import com.aizuda.snailjob.server.web.model.request.SystemUserQueryVO; -import com.aizuda.snailjob.server.web.model.request.SystemUserRequestVO; -import com.aizuda.snailjob.server.web.model.request.UserSessionVO; +import com.aizuda.snailjob.server.web.model.request.*; import com.aizuda.snailjob.server.web.model.response.PermissionsResponseVO; import com.aizuda.snailjob.server.web.model.response.SystemUserResponseVO; @@ -22,6 +19,8 @@ public interface SystemUserService { SystemUserResponseVO login(SystemUserRequestVO requestVO); + SystemUserResponseVO loginByToken(SystemAuthRequestVO requestVO); + SystemUserResponseVO getUserInfo(UserSessionVO systemUser); void addUser(SystemUserRequestVO requestVO); diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SystemUserServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SystemUserServiceImpl.java index b57d9687c..3ec2b53f3 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SystemUserServiceImpl.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SystemUserServiceImpl.java @@ -7,7 +7,6 @@ import cn.hutool.crypto.SecureUtil; import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.common.core.util.StreamUtils; import com.aizuda.snailjob.server.common.exception.SnailJobServerException; -import com.aizuda.snailjob.server.web.model.request.UserSessionVO; import com.aizuda.snailjob.server.web.annotation.RoleEnum; import com.aizuda.snailjob.server.web.model.base.PageResult; import com.aizuda.snailjob.server.web.model.request.*; @@ -27,13 +26,16 @@ import com.aizuda.snailjob.template.datasource.persistence.po.SystemUserPermissi import com.auth0.jwt.JWT; import com.auth0.jwt.algorithms.Algorithm; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.AES; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO; import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.nio.charset.StandardCharsets; import java.util.*; /** @@ -47,6 +49,10 @@ import java.util.*; @Service @RequiredArgsConstructor public class SystemUserServiceImpl implements SystemUserService { + + @Value("${gitee.login.key:123456}") + private String giteeLoginKey; + public static final long EXPIRE_TIME = 3600 * 24 * 1000; private final SystemUserMapper systemUserMapper; @@ -81,6 +87,34 @@ public class SystemUserServiceImpl implements SystemUserService { return systemUserResponseVO; } + @Override + public SystemUserResponseVO loginByToken(SystemAuthRequestVO requestVO) { + try { + byte[] bytes = Base64.getUrlDecoder().decode(requestVO.getToken()); + String text = new String(AES.decrypt(bytes, giteeLoginKey.getBytes(StandardCharsets.UTF_8))); + long timestamp = Long.parseLong(text.substring(0, 10)); + long currentTime = System.currentTimeMillis() / 1000; + if ((currentTime - timestamp) > 600) { + throw new SnailJobServerException("授权票据已失效"); + } + } catch (Throwable t) { + throw new SnailJobServerException("授权票据验证失败"); + } + + SystemUser systemUser = systemUserMapper.selectOne( + new LambdaQueryWrapper() + .eq(SystemUser::getUsername, "developer")); + + String loginToken = getToken(systemUser); + + SystemUserResponseVO systemUserResponseVO = SystemUserResponseVOConverter.INSTANCE.convert(systemUser); + systemUserResponseVO.setToken(loginToken); + + getPermission(systemUser.getRole(), systemUser.getId(), systemUserResponseVO); + + return systemUserResponseVO; + } + private void getPermission(Integer role, Long userId, final SystemUserResponseVO systemUserResponseVO) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();