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 9ef73e0e..417c630d 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 3975c395..f1e9734f 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 00000000..13c26443 --- /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 ca7bc838..af484416 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 b57d9687..3ec2b53f 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<>();