feat(preview): 新增 Gitee 授权登录接口
This commit is contained in:
parent
52fc8b7ddf
commit
3712dead8a
@ -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
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
||||
}
|
@ -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);
|
||||
|
@ -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<SystemUser>()
|
||||
.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<Namespace> queryWrapper = new LambdaQueryWrapper<>();
|
||||
|
Loading…
Reference in New Issue
Block a user