feat(preview): 新增 Gitee 授权登录接口
This commit is contained in:
parent
52fc8b7ddf
commit
3712dead8a
@ -80,5 +80,5 @@ snail-job:
|
|||||||
retry-pull-page-size: 1000 # 拉取重试数据的每批次的大小
|
retry-pull-page-size: 1000 # 拉取重试数据的每批次的大小
|
||||||
job-pull-page-size: 1000 # 拉取重试数据的每批次的大小
|
job-pull-page-size: 1000 # 拉取重试数据的每批次的大小
|
||||||
server-port: 17888 # 服务器端口
|
server-port: 17888 # 服务器端口
|
||||||
log-storage: 7 # 日志保存时间(单位: day)
|
log-storage: 1 # 日志保存时间(单位: day)
|
||||||
rpc-type: grpc
|
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.LoginUser;
|
||||||
import com.aizuda.snailjob.server.web.annotation.RoleEnum;
|
import com.aizuda.snailjob.server.web.annotation.RoleEnum;
|
||||||
import com.aizuda.snailjob.server.web.model.base.PageResult;
|
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.*;
|
||||||
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.response.PermissionsResponseVO;
|
import com.aizuda.snailjob.server.web.model.response.PermissionsResponseVO;
|
||||||
import com.aizuda.snailjob.server.web.model.response.SystemUserResponseVO;
|
import com.aizuda.snailjob.server.web.model.response.SystemUserResponseVO;
|
||||||
import com.aizuda.snailjob.server.web.service.SystemUserService;
|
import com.aizuda.snailjob.server.web.service.SystemUserService;
|
||||||
@ -36,6 +33,11 @@ public class SystemUserController {
|
|||||||
return systemUserService.login(requestVO);
|
return systemUserService.login(requestVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PostMapping("/auth/login/token")
|
||||||
|
public SystemUserResponseVO loginToken(@RequestBody SystemAuthRequestVO requestVO){
|
||||||
|
return systemUserService.loginByToken(requestVO);
|
||||||
|
}
|
||||||
|
|
||||||
@LoginRequired
|
@LoginRequired
|
||||||
@GetMapping("/user/info")
|
@GetMapping("/user/info")
|
||||||
public SystemUserResponseVO getUserInfo(@LoginUser UserSessionVO systemUser) {
|
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;
|
package com.aizuda.snailjob.server.web.service;
|
||||||
|
|
||||||
import com.aizuda.snailjob.server.web.model.base.PageResult;
|
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.*;
|
||||||
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.response.PermissionsResponseVO;
|
import com.aizuda.snailjob.server.web.model.response.PermissionsResponseVO;
|
||||||
import com.aizuda.snailjob.server.web.model.response.SystemUserResponseVO;
|
import com.aizuda.snailjob.server.web.model.response.SystemUserResponseVO;
|
||||||
|
|
||||||
@ -22,6 +19,8 @@ public interface SystemUserService {
|
|||||||
|
|
||||||
SystemUserResponseVO login(SystemUserRequestVO requestVO);
|
SystemUserResponseVO login(SystemUserRequestVO requestVO);
|
||||||
|
|
||||||
|
SystemUserResponseVO loginByToken(SystemAuthRequestVO requestVO);
|
||||||
|
|
||||||
SystemUserResponseVO getUserInfo(UserSessionVO systemUser);
|
SystemUserResponseVO getUserInfo(UserSessionVO systemUser);
|
||||||
|
|
||||||
void addUser(SystemUserRequestVO requestVO);
|
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.JsonUtil;
|
||||||
import com.aizuda.snailjob.common.core.util.StreamUtils;
|
import com.aizuda.snailjob.common.core.util.StreamUtils;
|
||||||
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
|
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.annotation.RoleEnum;
|
||||||
import com.aizuda.snailjob.server.web.model.base.PageResult;
|
import com.aizuda.snailjob.server.web.model.base.PageResult;
|
||||||
import com.aizuda.snailjob.server.web.model.request.*;
|
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.JWT;
|
||||||
import com.auth0.jwt.algorithms.Algorithm;
|
import com.auth0.jwt.algorithms.Algorithm;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
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.core.toolkit.Wrappers;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -47,6 +49,10 @@ import java.util.*;
|
|||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SystemUserServiceImpl implements SystemUserService {
|
public class SystemUserServiceImpl implements SystemUserService {
|
||||||
|
|
||||||
|
@Value("${gitee.login.key:123456}")
|
||||||
|
private String giteeLoginKey;
|
||||||
|
|
||||||
public static final long EXPIRE_TIME = 3600 * 24 * 1000;
|
public static final long EXPIRE_TIME = 3600 * 24 * 1000;
|
||||||
|
|
||||||
private final SystemUserMapper systemUserMapper;
|
private final SystemUserMapper systemUserMapper;
|
||||||
@ -81,6 +87,34 @@ public class SystemUserServiceImpl implements SystemUserService {
|
|||||||
return systemUserResponseVO;
|
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) {
|
private void getPermission(Integer role, Long userId, final SystemUserResponseVO systemUserResponseVO) {
|
||||||
|
|
||||||
LambdaQueryWrapper<Namespace> queryWrapper = new LambdaQueryWrapper<>();
|
LambdaQueryWrapper<Namespace> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
Loading…
Reference in New Issue
Block a user