diff --git a/pom.xml b/pom.xml
index 6fc0353..ac6c270 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,6 +127,15 @@
lombok
+
+ org.springframework.boot
+ spring-boot-starter-data-redis
+
+
+ org.apache.commons
+ commons-pool2
+
+
diff --git a/src/main/java/net/lensfrex/dscape/ServerMain.java b/src/main/java/net/lensfrex/dscape/ServerMain.java
index 5ca5704..f38b681 100644
--- a/src/main/java/net/lensfrex/dscape/ServerMain.java
+++ b/src/main/java/net/lensfrex/dscape/ServerMain.java
@@ -4,9 +4,11 @@ import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.ComponentScans;
@SpringBootApplication
-@MapperScan("net.lensfrex.dscape.module.dao.mappers")
+@MapperScan("net.lensfrex.dscape.dao.mapper")
public class ServerMain extends SpringBootServletInitializer {
public static void main(String[] args) {
diff --git a/src/main/java/net/lensfrex/dscape/auth/StpInterfaceImpl.java b/src/main/java/net/lensfrex/dscape/auth/StpInterfaceImpl.java
index b1720cc..5679fe1 100644
--- a/src/main/java/net/lensfrex/dscape/auth/StpInterfaceImpl.java
+++ b/src/main/java/net/lensfrex/dscape/auth/StpInterfaceImpl.java
@@ -1,19 +1,97 @@
package net.lensfrex.dscape.auth;
import cn.dev33.satoken.stp.StpInterface;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import lombok.extern.slf4j.Slf4j;
+import net.lensfrex.dscape.dao.entity.RolePermission;
+import net.lensfrex.dscape.dao.entity.UserRole;
+import net.lensfrex.dscape.dao.service.RolePermissionService;
+import net.lensfrex.dscape.dao.service.UserRoleService;
+import net.lensfrex.dscape.dao.service.impl.UserRoleServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
+import java.util.ArrayList;
import java.util.List;
+@Slf4j
@Component
public class StpInterfaceImpl implements StpInterface {
+
+ private final UserRoleService userRoleService;
+ private final RolePermissionService rolePermissionService;
+
+ private final RedisTemplate redis;
+
+ @Autowired
+ public StpInterfaceImpl(RedisTemplate redis,
+ UserRoleService userRoleService,
+ RolePermissionService rolePermissionService) {
+
+ this.userRoleService = userRoleService;
+ this.rolePermissionService = rolePermissionService;
+ this.redis = redis;
+ }
+
+
@Override
public List getPermissionList(Object loginId, String loginType) {
- return null;
+ String uid = (String) loginId;
+
+ List userRoles = this.getRoleList(loginId, loginType);
+ List rolePermissions = new ArrayList<>();
+
+ for (String role : userRoles) {
+ String redisRolePermissionKey = "dscape:auth:role.permission:" + role;
+
+ if (Boolean.FALSE.equals(redis.hasKey(redisRolePermissionKey))) {
+ log.debug("角色 " + uid + " 的权限信息缓存不存在,从数据库中查找并放入缓存");
+
+ rolePermissions.addAll(rolePermissionService.getPermissions(role));
+ if (rolePermissions.isEmpty()) {
+ return rolePermissions;
+ }
+
+ redis.opsForList().leftPushAll(redisRolePermissionKey, rolePermissions);
+ } else {
+ List cachedUserRole = redis.opsForList().range(redisRolePermissionKey, 0, -1);
+ if (cachedUserRole == null) {
+ return rolePermissions;
+ }
+
+ rolePermissions.addAll(cachedUserRole);
+ }
+ }
+
+ return rolePermissions;
}
@Override
public List getRoleList(Object loginId, String loginType) {
- return null;
+ String uid = (String) loginId;
+ String redisUserRoleKey = "dscape:auth:user.role:" + uid;
+
+ List userRoleList = new ArrayList<>(2);
+ if (Boolean.FALSE.equals(redis.hasKey(redisUserRoleKey))) {
+ log.debug("用户 " + uid + " 的角色信息缓存不存在,从数据库中查找并放入缓存");
+
+ userRoleList.addAll(userRoleService.getRoles(uid));
+
+ if (userRoleList.isEmpty()) {
+ return userRoleList;
+ }
+
+ redis.opsForList().leftPushAll(redisUserRoleKey, userRoleList);
+ } else {
+ List cachedUserRole = redis.opsForList().range(redisUserRoleKey, 0, -1);
+ if (cachedUserRole == null) {
+ return userRoleList;
+ }
+
+ userRoleList.addAll(cachedUserRole);
+ }
+
+ return userRoleList;
}
-}
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/entity/ComputeHistory.java b/src/main/java/net/lensfrex/dscape/dao/entity/ComputeHistory.java
index 00f4a84..c01f423 100644
--- a/src/main/java/net/lensfrex/dscape/dao/entity/ComputeHistory.java
+++ b/src/main/java/net/lensfrex/dscape/dao/entity/ComputeHistory.java
@@ -15,10 +15,10 @@ public class ComputeHistory implements Serializable {
private static final long serialVersionUID = 1L;
- @TableId(type = IdType.AUTO)
/**
* id
*/
+ @TableId(type = IdType.AUTO)
private Integer id;
/**
diff --git a/src/main/java/net/lensfrex/dscape/dao/entity/RolePermission.java b/src/main/java/net/lensfrex/dscape/dao/entity/RolePermission.java
new file mode 100644
index 0000000..a934fd5
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/entity/RolePermission.java
@@ -0,0 +1,52 @@
+package net.lensfrex.dscape.dao.entity;
+
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+/**
+ * @description role_permission
+ * @author lensfrex
+ * @date 2022-08-17
+ */
+@Data
+public class RolePermission implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(type = IdType.AUTO)
+ /**
+ * id
+ */
+ private Long id;
+
+ /**
+ * 角色id
+ */
+ private Integer role;
+
+ /**
+ * 权限id
+ */
+ private Integer permission;
+
+ /**
+ * create_time
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * edit_time
+ */
+ private LocalDateTime editTime;
+
+ /**
+ * is_deleted
+ */
+ private int isDeleted;
+
+ public RolePermission() {}
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/entity/UserRole.java b/src/main/java/net/lensfrex/dscape/dao/entity/UserRole.java
new file mode 100644
index 0000000..4768d73
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/entity/UserRole.java
@@ -0,0 +1,52 @@
+package net.lensfrex.dscape.dao.entity;
+
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+/**
+ * @description user_role
+ * @author lensfrex
+ * @date 2022-08-17
+ */
+@Data
+public class UserRole implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(type = IdType.AUTO)
+ private Long id;
+
+ /**
+ * 角色id
+ */
+ private Integer role;
+
+ /**
+ * 用户uid
+ */
+ private String uid;
+
+ /**
+ * create_time
+ */
+ private LocalDateTime createTime;
+
+ /**
+ * edit_time
+ */
+ private LocalDateTime editTime;
+
+ /**
+ * is_deleted
+ */
+ private int isDeleted;
+
+ public UserRole() {}
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/mapper/RolePermissionMapper.java b/src/main/java/net/lensfrex/dscape/dao/mapper/RolePermissionMapper.java
new file mode 100644
index 0000000..2bf3b05
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/mapper/RolePermissionMapper.java
@@ -0,0 +1,15 @@
+package net.lensfrex.dscape.dao.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import net.lensfrex.dscape.dao.entity.RolePermission;
+import java.util.List;
+/**
+ * @description role_permissionMapper
+ * @author lensfrex
+ * @date 2022-08-17
+ */
+@Mapper
+public interface RolePermissionMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/mapper/UserRoleMapper.java b/src/main/java/net/lensfrex/dscape/dao/mapper/UserRoleMapper.java
new file mode 100644
index 0000000..69dd095
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/mapper/UserRoleMapper.java
@@ -0,0 +1,15 @@
+package net.lensfrex.dscape.dao.mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import net.lensfrex.dscape.dao.entity.UserRole;
+import java.util.List;
+/**
+ * @description user_roleMapper
+ * @author lensfrex
+ * @date 2022-08-17
+ */
+@Mapper
+public interface UserRoleMapper extends BaseMapper {
+
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/service/RolePermissionService.java b/src/main/java/net/lensfrex/dscape/dao/service/RolePermissionService.java
new file mode 100644
index 0000000..cf89b08
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/service/RolePermissionService.java
@@ -0,0 +1,22 @@
+package net.lensfrex.dscape.dao.service;
+import net.lensfrex.dscape.dao.entity.RolePermission;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * @description role_permission服务层
+ * @author lensfrex
+ * @date 2022-08-17
+ */
+@Service
+public interface RolePermissionService extends IService {
+ @Select("select permission from role_permission where role = #{role} and is_deleted = 0")
+ List getPermissions(String role);
+
+ @Select("select permission from role_permission where role = #{role} and is_deleted = 0")
+ List getPermissions(List roles);
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/service/UserRoleService.java b/src/main/java/net/lensfrex/dscape/dao/service/UserRoleService.java
new file mode 100644
index 0000000..349859a
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/service/UserRoleService.java
@@ -0,0 +1,19 @@
+package net.lensfrex.dscape.dao.service;
+import net.lensfrex.dscape.dao.entity.UserRole;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.List;
+
+/**
+ * @description user_role服务层
+ * @author lensfrex
+ * @date 2022-08-17
+ */
+@Service
+public interface UserRoleService extends IService {
+
+ @Select("select role from user_role where uid = '#{uid}' and is_deleted != 1")
+ List getRoles(String uid);
+}
\ No newline at end of file
diff --git a/src/main/java/net/lensfrex/dscape/dao/service/impl/RolePermissionServiceImpl.java b/src/main/java/net/lensfrex/dscape/dao/service/impl/RolePermissionServiceImpl.java
new file mode 100644
index 0000000..b94e376
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/service/impl/RolePermissionServiceImpl.java
@@ -0,0 +1,51 @@
+/*
+ * Class created by lensfrex.
+ */
+
+package net.lensfrex.dscape.dao.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import net.lensfrex.dscape.dao.entity.RolePermission;
+import net.lensfrex.dscape.dao.mapper.RolePermissionMapper;
+import net.lensfrex.dscape.dao.service.RolePermissionService;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class RolePermissionServiceImpl extends ServiceImpl implements RolePermissionService {
+ @Override
+ public List getPermissions(String role) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.lambda()
+ .select(RolePermission::getPermission)
+ .eq(RolePermission::getRole, role)
+ .eq(RolePermission::getIsDeleted, 0);
+
+ return this.getPermissions(wrapper);
+ }
+
+ @Override
+ public List getPermissions(List roles) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.lambda()
+ .select(RolePermission::getPermission)
+ .in(RolePermission::getRole, roles)
+ .eq(RolePermission::getIsDeleted, 0);
+
+ return this.getPermissions(wrapper);
+ }
+
+ private List getPermissions(QueryWrapper wrapper) {
+
+ List rolePermissionList = this.list(wrapper);
+
+ List permissions = new ArrayList<>();
+ rolePermissionList.forEach(rolePermission -> permissions.add(rolePermission.getPermission().toString()));
+
+ return permissions;
+ }
+}
diff --git a/src/main/java/net/lensfrex/dscape/dao/service/impl/UserRoleServiceImpl.java b/src/main/java/net/lensfrex/dscape/dao/service/impl/UserRoleServiceImpl.java
new file mode 100644
index 0000000..8a4c1ca
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dao/service/impl/UserRoleServiceImpl.java
@@ -0,0 +1,37 @@
+/*
+ * Class created by lensfrex.
+ */
+
+package net.lensfrex.dscape.dao.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import net.lensfrex.dscape.dao.entity.UserRole;
+import net.lensfrex.dscape.dao.mapper.UserRoleMapper;
+import net.lensfrex.dscape.dao.service.UserRoleService;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService {
+
+ @Override
+ public List getRoles(String uid) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.lambda()
+ .select(UserRole::getRole)
+ .eq(UserRole::getUid, uid)
+ .eq(UserRole::getIsDeleted, 0);
+
+ List userRoleList = this.list(wrapper);
+ List roles = new ArrayList<>();
+
+ userRoleList.forEach(userRole -> roles.add(userRole.getRole().toString()));
+
+ return roles;
+ }
+}
diff --git a/src/main/java/net/lensfrex/dscape/dto/request/UserLoginRequestBody.java b/src/main/java/net/lensfrex/dscape/dto/request/UserLoginRequestBody.java
new file mode 100644
index 0000000..c1a7785
--- /dev/null
+++ b/src/main/java/net/lensfrex/dscape/dto/request/UserLoginRequestBody.java
@@ -0,0 +1,15 @@
+
+package net.lensfrex.dscape.dto.request;
+
+import javax.annotation.Generated;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class UserLoginRequestBody {
+ private String password;
+
+ @JsonProperty("user_name")
+ private String userName;
+}
diff --git a/src/main/java/net/lensfrex/dscape/web/controllers/Error.java b/src/main/java/net/lensfrex/dscape/web/controllers/Error.java
index 43cd5d5..443a727 100644
--- a/src/main/java/net/lensfrex/dscape/web/controllers/Error.java
+++ b/src/main/java/net/lensfrex/dscape/web/controllers/Error.java
@@ -10,9 +10,9 @@ import org.springframework.web.bind.annotation.ExceptionHandler;
@ControllerAdvice
public class Error extends AbstractMethodError {
- @ExceptionHandler({ RuntimeException.class })
- public Response error() {
- return Response.error(50000, "服务器内部错误....");
- }
+// @ExceptionHandler({ RuntimeException.class })
+// public Response error() {
+// return Response.error(50000, "服务器内部错误....");
+// }
}
diff --git a/src/main/java/net/lensfrex/dscape/web/controllers/compute/Compute.java b/src/main/java/net/lensfrex/dscape/web/controllers/compute/ComputeController.java
similarity index 93%
rename from src/main/java/net/lensfrex/dscape/web/controllers/compute/Compute.java
rename to src/main/java/net/lensfrex/dscape/web/controllers/compute/ComputeController.java
index 9538e7e..d67cde3 100644
--- a/src/main/java/net/lensfrex/dscape/web/controllers/compute/Compute.java
+++ b/src/main/java/net/lensfrex/dscape/web/controllers/compute/ComputeController.java
@@ -11,7 +11,7 @@ import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/compute")
-public class Compute {
+public class ComputeController {
@GetMapping(value = "/status/{tid}", produces = "application/json")
public Response status(@PathVariable String tid,
@RequestHeader String token) {
diff --git a/src/main/java/net/lensfrex/dscape/web/controllers/history/History.java b/src/main/java/net/lensfrex/dscape/web/controllers/history/HistoryController.java
similarity index 94%
rename from src/main/java/net/lensfrex/dscape/web/controllers/history/History.java
rename to src/main/java/net/lensfrex/dscape/web/controllers/history/HistoryController.java
index 30871d0..ecf1824 100644
--- a/src/main/java/net/lensfrex/dscape/web/controllers/history/History.java
+++ b/src/main/java/net/lensfrex/dscape/web/controllers/history/HistoryController.java
@@ -10,7 +10,7 @@ import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/history")
-public class History {
+public class HistoryController {
@GetMapping(value = "/list/{uid}", produces = "application/json")
public Response