瀏覽代碼

授权项目才能看到项目

wuweihao 3 年之前
父節點
當前提交
30041900d9
共有 46 個文件被更改,包括 2294 次插入2200 次删除
  1. 17 1
      README.md
  2. 15 10
      gis_admin/src/main/java/com/gis/admin/controller/LoginController.java
  3. 15 8
      gis_admin/src/main/java/com/gis/admin/controller/SysUserController.java
  4. 3 0
      gis_admin/src/main/java/com/gis/admin/entity/po/SysUserEntity.java
  5. 3 0
      gis_admin/src/main/java/com/gis/admin/mapper/SysUserMapper.java
  6. 4 1
      gis_admin/src/main/java/com/gis/admin/service/SysUserService.java
  7. 38 21
      gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java
  8. 36 66
      gis_admin/src/main/java/com/gis/admin/shiro/ShiroConfig.java
  9. 3 8
      gis_admin/src/main/java/com/gis/admin/shiro/ShiroRealm.java
  10. 8 0
      gis_cms/pom.xml
  11. 48 0
      gis_cms/src/main/java/com/gis/cms/controller/ApiDbController.java
  12. 0 112
      gis_cms/src/main/java/com/gis/cms/controller/GoodsController.java
  13. 0 84
      gis_cms/src/main/java/com/gis/cms/controller/ImgController.java
  14. 0 88
      gis_cms/src/main/java/com/gis/cms/controller/LeaderController.java
  15. 0 89
      gis_cms/src/main/java/com/gis/cms/controller/MusicController.java
  16. 0 89
      gis_cms/src/main/java/com/gis/cms/controller/StudentController.java
  17. 0 90
      gis_cms/src/main/java/com/gis/cms/controller/VideoController.java
  18. 0 116
      gis_cms/src/main/java/com/gis/cms/controller/WebController.java
  19. 14 0
      gis_cms/src/main/java/com/gis/cms/service/ApiDbService.java
  20. 46 0
      gis_cms/src/main/java/com/gis/cms/service/impl/ApiDbServiceImpl.java
  21. 2 6
      gis_cms/src/main/java/com/gis/cms/service/impl/WebServiceImpl.java
  22. 46 0
      gis_common/src/main/java/com/gis/common/base/controller/IpController.java
  23. 14 0
      gis_common/src/main/java/com/gis/common/base/entity/dto/IdPageDto.java
  24. 34 0
      gis_common/src/main/java/com/gis/common/base/entity/dto/IpDto.java
  25. 35 0
      gis_common/src/main/java/com/gis/common/base/entity/po/SysIpEntity.java
  26. 50 0
      gis_common/src/main/java/com/gis/common/base/service/IBaseService.java
  27. 25 0
      gis_common/src/main/java/com/gis/common/base/service/SysIpService.java
  28. 117 0
      gis_common/src/main/java/com/gis/common/base/service/impl/SysIpServiceImpl.java
  29. 72 0
      gis_common/src/main/java/com/gis/common/config/FastJson2JsonRedisSerializer.java
  30. 0 57
      gis_common/src/main/java/com/gis/common/config/MyRedisConfig.java
  31. 143 0
      gis_common/src/main/java/com/gis/common/config/RedisConfig.java
  32. 1 0
      gis_common/src/main/java/com/gis/common/constant/ErrorEnum.java
  33. 86 0
      gis_common/src/main/java/com/gis/common/filter/ApiInterceptor.java
  34. 140 0
      gis_common/src/main/java/com/gis/common/util/EncryptUtils.java
  35. 77 51
      gis_common/src/main/java/com/gis/common/util/JwtUtil.java
  36. 1 1
      gis_common/src/main/java/com/gis/common/util/PasswordUtils.java
  37. 0 1187
      gis_common/src/main/java/com/gis/common/util/RedisCache.java
  38. 1117 99
      gis_common/src/main/java/com/gis/common/util/RedisUtil.java
  39. 38 0
      gis_common/src/main/java/com/gis/common/util/ResponseUtils.java
  40. 0 5
      gis_db/src/main/java/com/gis/db/controller/FieldController.java
  41. 4 2
      gis_db/src/main/java/com/gis/db/controller/ProjectController.java
  42. 1 1
      gis_db/src/main/java/com/gis/db/controller/TableController.java
  43. 3 1
      gis_db/src/main/java/com/gis/db/mapper/ProjectMapper.java
  44. 1 5
      gis_db/src/main/java/com/gis/db/service/ProjectService.java
  45. 37 1
      gis_db/src/main/java/com/gis/db/service/impl/ProjectServiceImpl.java
  46. 0 1
      gis_db/src/main/java/com/gis/db/service/impl/TableServiceImpl.java

+ 17 - 1
README.md

@@ -2,7 +2,23 @@
 
 # 模块
 gis_biguiyuan  AR-碧桂园项目-文通部门
-111
+
+# 自定义数据库
+ appId使用说明
+    1. 应用请求需要在header携带APPID
+    2. APPID是通过项目id加密而成
+    3. 通过projectId查询是否ip表, 验证该请求是否白名单
+    
+    规则:
+    方案一
+    1. projectId:ip -> 加密成字符串 -> appId
+    2. 应用携带appId到header
+    3. 校验 -> 解密出projectId, ip -> 校验ip跟请求ip是否一致(次方案过于严谨)
+    
+    方案二:(使用此方案)
+    1. projectId -> 加密出appId
+    2. 应用携带appId到header
+    3. 校验 -> 解密出projectId -> 查询ip百名单
 
 
 

+ 15 - 10
gis_admin/src/main/java/com/gis/admin/controller/LoginController.java

@@ -1,6 +1,5 @@
 package com.gis.admin.controller;
 
-import com.gis.admin.entity.po.SysRoleEntity;
 import com.gis.common.base.entity.po.LogEntity;
 import com.gis.common.base.service.LogService;
 import com.gis.common.constant.ConfigConstant;
@@ -11,9 +10,9 @@ import com.gis.admin.service.SysUserService;
 import com.gis.admin.entity.dto.LoginDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import lombok.extern.log4j.Log4j2;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -31,7 +30,6 @@ import java.util.concurrent.TimeUnit;
 /**
  * Created by owen on 2020/2/19 0019 15:53
  */
-@ApiIgnore
 @Slf4j
 @Api(tags = "sys-登录")
 @RestController
@@ -102,13 +100,14 @@ public class LoginController {
         HashMap<String, Object> tokenMap = new HashMap<>();
         tokenMap.put("userName", entity.getUserName());
         tokenMap.put("id", userId);
-        boolean isAdmin = false;
+        int isAdmin = 0;
         if (entity.getIsAdmin() == 1) {
             // 设置角色权限
             tokenMap.put("roleKeys", Arrays.asList(ROLE_SYS_ADMIN));
-            isAdmin = true;
-        }
+            isAdmin = 1;
 
+        }
+        tokenMap.put("isAdmin", isAdmin);
         String token = JwtUtil.createJWT(TOKEN_EXPIRE, tokenMap);
 
 
@@ -123,7 +122,7 @@ public class LoginController {
         // 保存操作日志
         saveLog(userId);
 
-        redisUtil.set(configConstant.redisPrefix + token, token, 23, TimeUnit.HOURS);
+        redisUtil.setEx(configConstant.redisPrefix + token, token, 23, TimeUnit.HOURS);
 
 
         return Result.success(result);
@@ -148,7 +147,7 @@ public class LoginController {
         if (StringUtils.isBlank(token)) {
             log.info("token is null");
         }
-        String o = (String) redisUtil.get(configConstant.redisPrefix + token);
+        String o = redisUtil.getCacheObject(configConstant.redisPrefix + token);
         return Result.success(o != null);
     }
 
@@ -180,9 +179,9 @@ public class LoginController {
      * @param userId
      * @return
      */
-    private Set<String> getRoleKey(Long userId, boolean isAdmin){
+    private Set<String> getRoleKey(Long userId, int isAdmin){
         Set<String> roleKeys;
-        if (isAdmin){
+        if (isAdmin == 1){
             roleKeys = new HashSet<>();
             roleKeys.add(ROLE_SYS_ADMIN);
         } else {
@@ -192,5 +191,11 @@ public class LoginController {
     }
 
 
+    @Test
+    public static void main(String[] args) {
+
+
+    }
+
 
 }

+ 15 - 8
gis_admin/src/main/java/com/gis/admin/controller/SysUserController.java

@@ -22,17 +22,16 @@ import javax.validation.Valid;
 /**
  * Created by owen on 2021/12/8 0018 12:17
  */
-@ApiIgnore
-@Slf4j
+//@ApiIgnore
 @Api(tags = "sys-用户管理")
 @RestController
-@RequestMapping("sys/user")
+@RequestMapping("/sys/user")
 public class SysUserController {
 
     @Autowired
     private SysUserService userService;
 
-    @ApiIgnore
+//    @ApiIgnore
     @RequiresRoles(value = {"sys_admin"}, logical = Logical.OR)
     @ApiOperation("用户列表")
     @PostMapping("list")
@@ -40,7 +39,7 @@ public class SysUserController {
         return userService.search(param);
     }
 
-    @ApiIgnore
+//    @ApiIgnore
     @RequiresRoles(value = {"sys_admin"}, logical = Logical.OR)
     @WebControllerLog(description = "用户管理-修改用户", addDb = true)
     @ApiOperation(value = "新增/修改用户信息", notes = "只能新增普通管理员")
@@ -49,7 +48,7 @@ public class SysUserController {
         return userService.saveEntity(param);
     }
 
-    @ApiIgnore
+//    @ApiIgnore
     @ApiOperation("详情")
     @GetMapping("detail/{id}")
     public Result<SysUserEntity> detail(@PathVariable Long id) {
@@ -63,7 +62,7 @@ public class SysUserController {
         return userService.updatePwd(param);
     }
 
-    @ApiIgnore
+//    @ApiIgnore
     @RequiresRoles(value = {"sys_admin"}, logical = Logical.OR)
     @WebControllerLog(description = "用户管理-重置密码", addDb = true)
     @ApiOperation("重置密码")
@@ -83,7 +82,7 @@ public class SysUserController {
 
     }
 
-    @ApiIgnore
+//    @ApiIgnore
     @RequiresRoles(value = {"sys_admin"}, logical = Logical.OR)
     @WebControllerLog(description = "用户管理-删除",addDb = true)
     @ApiOperation("删除")
@@ -92,6 +91,14 @@ public class SysUserController {
         return userService.removes(ids);
     }
 
+    @RequiresRoles(value = {"sys_admin"}, logical = Logical.OR)
+    @WebControllerLog(description = "用户管理-授权项目",addDb = true)
+    @ApiOperation("授权项目")
+    @GetMapping("/auth/{projectIds}")
+    public Result authProject(@PathVariable String projectIds) {
+        return userService.authProject(projectIds);
+    }
+
 
 }
 

+ 3 - 0
gis_admin/src/main/java/com/gis/admin/entity/po/SysUserEntity.java

@@ -48,6 +48,9 @@ public class SysUserEntity extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "缩略图url")
     private String thumb;
 
+    @ApiModelProperty(value = "项目ids")
+    private String projectIds;
+
 
 
 

+ 3 - 0
gis_admin/src/main/java/com/gis/admin/mapper/SysUserMapper.java

@@ -10,6 +10,7 @@ import com.gis.admin.entity.po.SysUserEntity;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.SelectProvider;
+import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -36,4 +37,6 @@ public interface SysUserMapper extends BaseMapper<SysUserEntity> {
     @SelectProvider(type = SysUserProvider.class, method = "search")
     List<SysUserEntity> search(UserPageDateDto param);
 
+    @Update("update sys_user set project_ids = #{projectIds} , update_time = NOW() where is_delete=0 and id = #{userId} ")
+    void setProjectId(String projectIds, Long userId);
 }

+ 4 - 1
gis_admin/src/main/java/com/gis/admin/service/SysUserService.java

@@ -33,10 +33,13 @@ public interface SysUserService extends IService<SysUserEntity> {
 
     Result register(RegisterDto param);
 
-//    Result getRole();
+
 
     Result<SysUserEntity> detail(Long id);
 
     Result retrievePassword(ResetPasswordDto param);
 
+    SysUserEntity cacheByUserName(String userName);
+
+    Result authProject(String projectIds);
 }

+ 38 - 21
gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java

@@ -14,6 +14,7 @@ import com.gis.common.base.entity.po.LogEntity;
 import com.gis.common.base.exception.BaseRuntimeException;
 //import com.gis.common.base.service.LogService;
 //import com.gis.common.base.service.impl.MyBaseServiceImpl;
+import com.gis.common.base.service.IBaseService;
 import com.gis.common.util.*;
 import com.gis.admin.entity.dto.PasswordDto;
 import com.gis.admin.entity.dto.UserDto;
@@ -33,6 +34,7 @@ import java.time.LocalDateTime;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Set;
+import java.util.concurrent.TimeUnit;
 
 
 /**
@@ -48,6 +50,15 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     @Autowired
     HttpServletRequest request;
 
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Autowired
+    IBaseService baseService;
+
+    /**redis 用户名*/
+    final static String USER_NAME_KEY = "user:";
+
 
     /**重置密码redis key*/
     final static String RESET_PASSWORD_KEY = "reset:password:";
@@ -58,6 +69,30 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
         return entityMapper.findByUserName(userName);
     }
 
+
+    @Override
+    public SysUserEntity cacheByUserName(String userName) {
+        SysUserEntity entity;
+        String userKey = USER_NAME_KEY + userName;
+        if (redisUtil.hasKey(userKey)){
+            entity =  redisUtil.getCacheObject(userKey);
+        } else {
+            entity = this.findByUserName(userName);
+            redisUtil.setCacheObject(userKey, entity, 5, TimeUnit.MINUTES);
+        }
+        return entity;
+    }
+
+    @Override
+    public Result authProject(String projectIds) {
+        Long userId = baseService.getUserId();
+        baseMapper.setProjectId(projectIds, userId);
+        String userKey = USER_NAME_KEY + userId;
+        redisUtil.delete(userKey);
+        return Result.success();
+    }
+
+
     @Override
     public Result saveEntity(UserDto param) {
         SysUserEntity entity ;
@@ -71,6 +106,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
             BeanUtils.copyProperties(param, entity);
             entity.setIsAdmin(0);
             entity.setPassword(PasswordUtils.encrypt(param.getUserName(), "123456", PasswordUtils.getStaticSalt()));
+            entity.setCreatorId(baseService.getUserId());
             this.save(entity);
         } else {
             entity = this.getById(id);
@@ -97,9 +133,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
                 log.error("管理员账户不能删除 {}", entity.getId());
                 return Result.failure("管理员账户不能删除");
             }
-//            entity.setIsDelete(1);
-//            entity.setUpdateTime(LocalDateTime.now());
-//            this.update(entity);
         }
         this.removeByIds(idList);
 
@@ -113,9 +146,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
         IPage<SysUserEntity> page = new Page<>(param.getPageNum() , param.getPageSize());
         LambdaQueryWrapper<SysUserEntity> wrapper = new LambdaQueryWrapper<>();
 
-//            wrapper.eq(SysUserEntity::getIsEnabled, 1);
-
-
         String startTime = param.getStartTime();
         String endTime = param.getEndTime();
         if (StringUtils.isNotBlank(startTime) || StringUtils.isNotBlank(endTime)){
@@ -135,20 +165,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
     }
 
 
-    private void updatePassword(PasswordDto param) {
-//        SysUserEntity user = this.findByUserName(JwtUtil.getUsername(getToken()));
-//
-//        // 验证原密码
-//        Boolean isBoolean = PasswordUtils.decrypt(user.getPassword(), param.getOldPassword(), PasswordUtils.getStaticSalt());
-//        if (!isBoolean) {
-//            log.error("原始密码错误");
-//            throw new BaseRuntimeException("原始密码错误");
-//        }
-//
-//        user.setPassword(PasswordUtils.encrypt(user.getUserName(), param.getNewPassword(), PasswordUtils.getStaticSalt()));
-//        user.setUpdateTime(LocalDateTime.now());
-//        this.update(user);
-    }
+
 
     @Override
     public Result updatePwd(PasswordDto param) {
@@ -157,7 +174,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
         String oldPassword = Base64Converter.decodePassword(param.getOldPassword());
         param.setNewPassword(newPassword);
         param.setOldPassword(oldPassword);
-        SysUserEntity user = this.findByUserName(JwtUtil.getUsername(request.getHeader("token")));
+        SysUserEntity user = this.findByUserName(JwtUtil.getUserName(request.getHeader("token")));
         updatePwd(param, user, true);
 //        updatePassword(param);
         return Result.success();

+ 36 - 66
gis_admin/src/main/java/com/gis/admin/shiro/ShiroConfig.java

@@ -2,14 +2,10 @@ package com.gis.admin.shiro;
 
 import com.gis.admin.shiro.filters.CustomShiroFilterFactoryBean;
 import com.gis.admin.shiro.filters.JwtFilter;
-import com.gis.admin.shiro.realm.UserJwtRealm;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy;
-import org.apache.shiro.authc.pam.ModularRealmAuthenticator;
 import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
 import org.apache.shiro.mgt.DefaultSubjectDAO;
 import org.apache.shiro.mgt.SecurityManager;
-import org.apache.shiro.realm.Realm;
 import org.apache.shiro.spring.LifecycleBeanPostProcessor;
 import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor;
 import org.apache.shiro.spring.web.ShiroFilterFactoryBean;
@@ -36,18 +32,13 @@ import java.util.*;
 @Configuration
 public class ShiroConfig {
 
-//    @Value("${jeecg.shiro.excludeUrls}")
+    //    @Value("${jeecg.shiro.excludeUrls}")
 //    private String excludeUrls;
     @Resource
     LettuceConnectionFactory lettuceConnectionFactory;
     @Autowired
     private Environment env;
 
-    @Autowired
-    UserJwtRealm userJwtRealm;
-
-
-
 
     /**
      * Filter Chain定义说明
@@ -62,7 +53,32 @@ public class ShiroConfig {
         shiroFilterFactoryBean.setSecurityManager(securityManager);
         // 拦截器
         Map<String, String> filterChainDefinitionMap = new LinkedHashMap<String, String>();
-
+//        if(oConvertUtils.isNotEmpty(excludeUrls)){
+//            String[] permissionUrl = excludeUrls.split(",");
+//            for(String url : permissionUrl){
+//                filterChainDefinitionMap.put(url,"anon");
+//            }
+//        }
+        // 配置不会被拦截的链接 顺序判断
+//        filterChainDefinitionMap.put("/sys/cas/client/validateLogin", "anon"); //cas验证登录
+////        filterChainDefinitionMap.put("/sys/randomImage/**", "anon"); //登录验证码接口排除
+////        filterChainDefinitionMap.put("/sys/checkCaptcha", "anon"); //登录验证码接口排除
+////        filterChainDefinitionMap.put("/sys/login", "anon"); //登录接口排除
+////        filterChainDefinitionMap.put("/sys/mLogin", "anon"); //登录接口排除
+////        filterChainDefinitionMap.put("/sys/logout", "anon"); //登出接口排除
+////        filterChainDefinitionMap.put("/sys/thirdLogin/**", "anon"); //第三方登录
+////        filterChainDefinitionMap.put("/sys/getEncryptedString", "anon"); //获取加密串
+////        filterChainDefinitionMap.put("/sys/sms", "anon");//短信验证码
+////        filterChainDefinitionMap.put("/sys/phoneLogin", "anon");//手机登录
+////        filterChainDefinitionMap.put("/sys/user/checkOnlyUser", "anon");//校验用户是否存在
+////        filterChainDefinitionMap.put("/sys/user/register", "anon");//用户注册
+////        filterChainDefinitionMap.put("/sys/user/querySysUser", "anon");//根据手机号获取用户信息
+////        filterChainDefinitionMap.put("/sys/user/phoneVerification", "anon");//用户忘记密码验证手机号
+////        filterChainDefinitionMap.put("/sys/user/passwordChange", "anon");//用户更改密码
+////        filterChainDefinitionMap.put("/auth/2step-code", "anon");//登录验证码
+////        filterChainDefinitionMap.put("/sys/common/static/**", "anon");//图片预览 &下载文件不限制token
+////        filterChainDefinitionMap.put("/sys/common/pdf/**", "anon");//pdf预览
+////        filterChainDefinitionMap.put("/generic/**", "anon");//pdf预览需要文件
 
         // 不拦截
         filterChainDefinitionMap.put("/login", "anon");
@@ -72,7 +88,6 @@ public class ShiroConfig {
         filterChainDefinitionMap.put("/test/**", "anon");
         filterChainDefinitionMap.put("/api/**", "anon");
         filterChainDefinitionMap.put("/web/**", "anon");
-        filterChainDefinitionMap.put("/db/**", "anon");
 
         filterChainDefinitionMap.put("/", "anon");
         filterChainDefinitionMap.put("/doc.html", "anon");
@@ -113,6 +128,9 @@ public class ShiroConfig {
 
         //测试示例
         filterChainDefinitionMap.put("/test/bigScreen/**", "anon"); //大屏模板例子
+        //filterChainDefinitionMap.put("/test/jeecgDemo/rabbitMqClientTest/**", "anon"); //MQ测试
+        //filterChainDefinitionMap.put("/test/jeecgDemo/html", "anon"); //模板页面
+        //filterChainDefinitionMap.put("/test/jeecgDemo/redis/**", "anon"); //redis测试
 
         //websocket排除
         filterChainDefinitionMap.put("/websocket/**", "anon");//系统通知和公告
@@ -127,13 +145,13 @@ public class ShiroConfig {
         Map<String, Filter> filterMap = new HashMap<String, Filter>(1);
         //如果cloudServer为空 则说明是单体 需要加载跨域配置
         Object cloudServer = env.getProperty("");
-        filterMap.put("user_jwt", new JwtFilter(cloudServer==null));
+        filterMap.put("jwt", new JwtFilter(cloudServer==null));
         shiroFilterFactoryBean.setFilters(filterMap);
         // <!-- 过滤链定义,从上向下顺序执行,一般将/**放在最为下边
 //        filterChainDefinitionMap.put("/**", "jwt");
-        filterChainDefinitionMap.put("/sys/**", "user_jwt");
-        filterChainDefinitionMap.put("/cms/**", "user_jwt");
-//        filterChainDefinitionMap.put("/api/**", "app_jwt");
+        filterChainDefinitionMap.put("/sys/**", "jwt");
+        filterChainDefinitionMap.put("/cms/**", "jwt");
+        filterChainDefinitionMap.put("/db/**", "jwt");
 
         // 未授权界面返回JSON
         shiroFilterFactoryBean.setUnauthorizedUrl("/sys/common/403");
@@ -142,17 +160,10 @@ public class ShiroConfig {
         return shiroFilterFactoryBean;
     }
 
-
-
     @Bean("securityManager")
-    public DefaultWebSecurityManager securityManager(UserJwtRealm userRealm) {
-
-
-
-
+    public DefaultWebSecurityManager securityManager(ShiroRealm myRealm) {
         DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-        securityManager.setRealm(userRealm);
-
+        securityManager.setRealm(myRealm);
 
         /*
          * 关闭shiro自带的session,详情见文档
@@ -169,47 +180,6 @@ public class ShiroConfig {
         return securityManager;
     }
 
-//    @Bean("securityManager")
-////    public DefaultWebSecurityManager securityManager(UserJwtRealm myRealm) {
-//    public DefaultWebSecurityManager securityManager() {
-//
-//        List<Realm> realms = new ArrayList<>();
-//        realms.add(userJwtRealm);
-//
-//
-//        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-////        securityManager.setRealm(myRealm);
-//        securityManager.setRealms(realms);
-//
-//
-//        //设置realm.
-//        securityManager.setAuthenticator(modularRealmAuthenticator());
-//
-//        /*
-//         * 关闭shiro自带的session,详情见文档
-//         * http://shiro.apache.org/session-management.html#SessionManagement-
-//         * StatelessApplications%28Sessionless%29
-//         */
-//        DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO();
-//        DefaultSessionStorageEvaluator defaultSessionStorageEvaluator = new DefaultSessionStorageEvaluator();
-//        defaultSessionStorageEvaluator.setSessionStorageEnabled(false);
-//        subjectDAO.setSessionStorageEvaluator(defaultSessionStorageEvaluator);
-//        securityManager.setSubjectDAO(subjectDAO);
-//        //自定义缓存实现,使用redis
-////        securityManager.setCacheManager(redisCacheManager());
-//        return securityManager;
-//    }
-
-
-//    @Bean
-//    public ModularRealmAuthenticator modularRealmAuthenticator() {
-//        //自己重写的ShiroModularRealmAuthenticator
-//        ShiroModularRealmAuthenticator modularRealmAuthenticator = new ShiroModularRealmAuthenticator();
-//        modularRealmAuthenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());
-//        return modularRealmAuthenticator;
-//    }
-
-
     /**
      * 下面的代码是添加注解支持
      * @return

+ 3 - 8
gis_admin/src/main/java/com/gis/admin/shiro/ShiroRealm.java

@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollectionUtil;
 import com.gis.common.constant.ConfigConstant;
 import com.gis.common.util.JwtUtil;
 import com.gis.admin.entity.po.SysUserEntity;
-import com.gis.admin.service.SysResourceService;
 import com.gis.admin.service.SysUserService;
 import com.gis.common.util.RedisUtil;
 import lombok.extern.slf4j.Slf4j;
@@ -18,14 +17,12 @@ import org.apache.shiro.authz.SimpleAuthorizationInfo;
 import org.apache.shiro.realm.AuthorizingRealm;
 import org.apache.shiro.subject.PrincipalCollection;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashSet;
 import java.util.List;
-import java.util.Set;
 
 /**
  * @Description: 用户登录鉴权和获取用户授权
@@ -82,7 +79,7 @@ public class ShiroRealm extends AuthorizingRealm {
         String token = request.getHeader("token");
 //        log.info("token: {}", token);
         if (StringUtils.isNotBlank(token)){
-            List userRole = JwtUtil.getUserRole(token);
+            List userRole = JwtUtil.getRoleKeys(token);
 //            userId = JwtUtil.getUserId(token);
             // list to set 添加角色sys_admin,sys
             if (CollectionUtil.isNotEmpty(userRole)){
@@ -112,7 +109,6 @@ public class ShiroRealm extends AuthorizingRealm {
     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken auth) throws AuthenticationException {
 //        log.debug("===============Shiro身份认证开始============doGetAuthenticationInfo==========");
         String token = (String) auth.getCredentials();
-//        log.info("token: {}", token);
         if (token == null) {
             throw new JwtAuthenticationException(5001, "header token is null");
         }
@@ -128,13 +124,12 @@ public class ShiroRealm extends AuthorizingRealm {
      */
     private SysUserEntity checkUserTokenIsEffect(String token) throws AuthenticationException {
         // 解密获得username,用于和数据库进行对比
-        String username = JwtUtil.getUsername(token);
+        String username = JwtUtil.getUserName(token);
         if (username == null) {
             throw new JwtAuthenticationException(5001, "token invalid");
         }
 
-//        String redisToken = redisTemplate.opsForValue().get(configConstant.redisPrefix + token);
-        String redisToken = (String)redisUtil.get(configConstant.redisPrefix + token);
+        String redisToken = redisUtil.getCacheObject(configConstant.redisPrefix + token);
 
         if (!token.equals(redisToken)) {
             log.error("redis token is null");

+ 8 - 0
gis_cms/pom.xml

@@ -17,6 +17,14 @@
             <artifactId>gis_admin</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>com.gis</groupId>
+            <artifactId>gis_db</artifactId>
+        </dependency>
+
+
+
+
     </dependencies>
 
 

+ 48 - 0
gis_cms/src/main/java/com/gis/cms/controller/ApiDbController.java

@@ -0,0 +1,48 @@
+package com.gis.cms.controller;
+
+import com.gis.cms.service.ApiDbService;
+import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.util.Result;
+import com.gis.db.entity.dto.TablePageDto;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+import java.time.LocalDateTime;
+
+/**
+ * Created by owen on 2021/7/7 0007 8:27
+ */
+@Api(tags = "数据外部相关接口")
+@RestController
+@RequestMapping("/api/db")
+public class ApiDbController {
+
+    @Autowired
+    ApiDbService apiDbService;
+
+//
+//    @GetMapping("test")
+//    public Result test(){
+//        return Result.success("我是api: " +  LocalDateTime.now());
+//    }
+
+
+    @ApiOperation(value = "表-列表")
+    @GetMapping("/tables")
+    public Result tables(@Valid @RequestBody PageDto param){
+        return apiDbService.tables(param);
+    }
+
+    @ApiOperation(value = "数据-列表(根据表id分页查询)")
+    @PostMapping("/record/{tableId}")
+    public Result recordByTableId(@PathVariable Long tableId, @Valid @RequestBody PageDto param){
+        return apiDbService.recordByTableId(tableId, param);
+    }
+
+
+
+}

+ 0 - 112
gis_cms/src/main/java/com/gis/cms/controller/GoodsController.java

@@ -1,112 +0,0 @@
-package com.gis.cms.controller;
-
-import com.gis.cms.entity.dto.GoodsPageDto;
-import com.gis.cms.entity.dto.SortPageDto;
-import com.gis.cms.entity.dto.GoodsDto;
-import com.gis.cms.entity.po.GoodsEntity;
-import com.gis.cms.service.FileService;
-import com.gis.cms.service.GoodsService;
-import com.gis.common.base.aop.WebControllerLog;
-import com.gis.common.util.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.ibatis.annotations.Param;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-/**
- * Created by owen on 2021/12/28 0008 9:54
- */
-@ApiIgnore
-@Slf4j
-@Api(tags = "文物管理")
-@RestController
-@RequestMapping("cms/goods")
-public class GoodsController {
-
-    @Autowired
-    private GoodsService entityService;
-
-    @Autowired
-    FileService fileService;
-
-
-    @ApiOperation(value = "列表")
-    @PostMapping("list")
-    public Result list(@Valid @RequestBody GoodsPageDto param) {
-        return entityService.search(param);
-    }
-
-
-    @WebControllerLog(description = "宣传片管理-新增/编辑", addDb = true)
-    @ApiOperation(value = "新增/编辑")
-    @PostMapping("save")
-    public Result save(@Valid @RequestBody GoodsDto param) {
-        return entityService.saveEntity(param);
-    }
-
-
-    @ApiOperation("详情")
-    @GetMapping("detail/{id}")
-    public Result<GoodsEntity> detail(@PathVariable Long id) {
-        return entityService.detail(id);
-    }
-
-    @ApiOperation(value = "是否显示", notes = "display: 1:显示, 0:不显示")
-    @GetMapping(value = "display/{id}/{display}")
-    public Result<GoodsEntity> display(@PathVariable Integer display, @PathVariable Long id) {
-        entityService.setDisplay(id, display);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "排序", notes = "sort: 序号")
-    @GetMapping(value = "sort/{id}/{sort}")
-    public Result<GoodsEntity> sort(@PathVariable Integer sort, @PathVariable Long id) {
-        entityService.setSort(id, sort);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "图片上传")
-    @PostMapping("upload")
-    public Result upload(MultipartFile file) {
-        return entityService.upload(file);
-    }
-
-    @ApiOperation(value = "视频上传")
-    @PostMapping("video/upload")
-    public Result videoUpload(MultipartFile file) {
-        String type = "video";
-        return entityService.videoUpload(file, type);
-    }
-
-
-    @ApiOperation("删除")
-    @GetMapping("remove/{id}")
-    public Result remove(@PathVariable Long id) {
-        return Result.success(entityService.removeById(id));
-    }
-
-    @ApiOperation("删除图片")
-    @GetMapping("imgRemove/{id}")
-    public Result imgRemove(@PathVariable Long id) {
-        return Result.success(fileService.removeById(id));
-    }
-
-//    @ApiOperation("设置封面")
-//    @GetMapping("imgIndex/{id}/{fileId}")
-//    public Result imgIndex(@PathVariable Long fileId, @PathVariable Long id) {
-//        return entityService.imgIndex(fileId, id);
-//    }
-
-
-
-
-
-
-
-}

+ 0 - 84
gis_cms/src/main/java/com/gis/cms/controller/ImgController.java

@@ -1,84 +0,0 @@
-package com.gis.cms.controller;
-
-import com.gis.cms.entity.dto.SortPageDto;
-import com.gis.cms.entity.dto.ImgDto;
-import com.gis.cms.entity.po.ImgEntity;
-import com.gis.cms.service.ImgService;
-import com.gis.common.base.aop.WebControllerLog;
-import com.gis.common.util.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-/**
- * Created by owen on 2021/12/28 0008 9:54
- */
-@ApiIgnore
-@Slf4j
-@Api(tags = "图片管理")
-@RestController
-@RequestMapping("cms/img")
-public class ImgController {
-
-    @Autowired
-    private ImgService entityService;
-
-
-    @ApiOperation(value = "列表")
-    @PostMapping("list")
-    public Result list(@RequestBody SortPageDto param) {
-        return entityService.search(param);
-    }
-
-    @ApiOperation("删除")
-    @GetMapping("remove/{id}")
-    public Result remove(@PathVariable Long id) {
-        return Result.success(entityService.removeById(id));
-    }
-
-    @WebControllerLog(description = "宣传片管理-新增/编辑", addDb = true)
-    @ApiOperation(value = "新增/编辑")
-    @PostMapping("save")
-    public Result save(@Valid @RequestBody ImgDto param) {
-        return entityService.saveEntity(param);
-    }
-
-
-    @ApiOperation("详情")
-    @GetMapping("detail/{id}")
-    public Result<ImgEntity> detail(@PathVariable Long id) {
-        return Result.success(entityService.getById(id));
-    }
-
-    @ApiOperation(value = "是否显示", notes = "display: 1:显示, 0:不显示")
-    @GetMapping(value = "display/{id}/{display}")
-    public Result<ImgEntity> display(@PathVariable Integer display, @PathVariable Long id) {
-        entityService.setDisplay(id, display);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "排序", notes = "sort: 序号")
-    @GetMapping(value = "sort/{id}/{sort}")
-    public Result<ImgEntity> sort(@PathVariable Integer sort, @PathVariable Long id) {
-        entityService.setSort(id, sort);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "图片上传")
-    @PostMapping("upload")
-    public Result upload(MultipartFile file) {
-        return entityService.upload(file);
-    }
-
-
-
-
-
-
-}

+ 0 - 88
gis_cms/src/main/java/com/gis/cms/controller/LeaderController.java

@@ -1,88 +0,0 @@
-package com.gis.cms.controller;
-
-import com.gis.cms.entity.dto.LeaderDto;
-import com.gis.cms.entity.dto.SortPageDto;
-import com.gis.cms.entity.po.LeaderEntity;
-import com.gis.cms.service.LeaderService;
-import com.gis.common.base.aop.WebControllerLog;
-import com.gis.common.util.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-/**
- * Created by owen on 2021/12/28 0008 9:54
- */
-@ApiIgnore
-@Slf4j
-@Api(tags = "领导管理")
-@RestController
-@RequestMapping("cms/leader")
-public class LeaderController {
-
-    @Autowired
-    private LeaderService entityService;
-
-
-    @ApiOperation(value = "列表")
-    @PostMapping("list")
-    public Result list(@RequestBody SortPageDto param) {
-        return entityService.search(param);
-    }
-
-
-    @WebControllerLog(description = "领导管理-新增/编辑", addDb = true)
-    @ApiOperation(value = "新增/编辑")
-    @PostMapping("save")
-    public Result save(@Valid @RequestBody LeaderDto param) {
-        return entityService.saveEntity(param);
-    }
-
-    @ApiOperation("删除")
-    @GetMapping("remove/{id}")
-    public Result remove(@PathVariable Long id) {
-        return Result.success(entityService.removeById(id));
-    }
-
-    @ApiOperation("详情")
-    @GetMapping("detail/{id}")
-    public Result<LeaderEntity> detail(@PathVariable Long id) {
-        return Result.success(entityService.getById(id));
-    }
-
-    @ApiOperation(value = "是否显示", notes = "display: 1:显示, 0:不显示")
-    @GetMapping(value = "display/{id}/{display}")
-    public Result<LeaderEntity> display(@PathVariable Integer display, @PathVariable Long id) {
-        entityService.setDisplay(id, display);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "排序", notes = "sort: 序号")
-    @GetMapping(value = "sort/{id}/{sort}")
-    public Result<LeaderEntity> sort(@PathVariable Integer sort, @PathVariable Long id) {
-        entityService.setSort(id, sort);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "图片上传")
-    @PostMapping("upload")
-    public Result upload(MultipartFile file) {
-        return entityService.upload(file);
-    }
-
-    @ApiOperation(value = "富文本-上传", notes = "类型type, img:图片, video:视频  ")
-    @PostMapping("rich/upload/{type}")
-    public Result richUpload(MultipartFile file, @PathVariable String type) {
-        return entityService.richUpload(file, type);
-    }
-
-
-
-
-}

+ 0 - 89
gis_cms/src/main/java/com/gis/cms/controller/MusicController.java

@@ -1,89 +0,0 @@
-package com.gis.cms.controller;
-
-import com.gis.cms.entity.dto.SortPageDto;
-import com.gis.cms.entity.dto.MusicDto;
-import com.gis.cms.entity.po.MusicEntity;
-import com.gis.cms.service.MusicService;
-import com.gis.common.base.aop.WebControllerLog;
-import com.gis.common.util.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-/**
- * Created by owen on 2021/12/28 0008 9:54
- */
-@ApiIgnore
-@Slf4j
-@Api(tags = "音乐管理")
-@RestController
-@RequestMapping("cms/music")
-public class MusicController {
-
-    @Autowired
-    private MusicService entityService;
-
-
-    @ApiOperation(value = "列表")
-    @PostMapping("list")
-    public Result list(@RequestBody SortPageDto param) {
-        return entityService.search(param);
-    }
-
-
-    @WebControllerLog(description = "音乐管理-新增/编辑", addDb = true)
-    @ApiOperation(value = "新增/编辑")
-    @PostMapping("save")
-    public Result save(@Valid @RequestBody MusicDto param) {
-        return entityService.saveEntity(param);
-    }
-
-    @ApiOperation("删除")
-    @GetMapping("remove/{id}")
-    public Result remove(@PathVariable Long id) {
-        return Result.success(entityService.removeById(id));
-    }
-
-    @ApiOperation("详情")
-    @GetMapping("detail/{id}")
-    public Result<MusicEntity> detail(@PathVariable Long id) {
-        return Result.success(entityService.getById(id));
-    }
-
-    @ApiOperation(value = "是否显示", notes = "display: 1:显示, 0:不显示")
-    @GetMapping(value = "display/{id}/{display}")
-    public Result<MusicEntity> display(@PathVariable Integer display, @PathVariable Long id) {
-        entityService.setDisplay(id, display);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "排序", notes = "sort: 序号")
-    @GetMapping(value = "sort/{id}/{sort}")
-    public Result<MusicEntity> sort(@PathVariable Integer sort, @PathVariable Long id) {
-        entityService.setSort(id, sort);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "图片上传")
-    @PostMapping("upload")
-    public Result upload(MultipartFile file) {
-        return entityService.upload(file);
-    }
-
-    @ApiOperation(value = "音乐上传")
-    @PostMapping("video/upload")
-    public Result videoUpload(MultipartFile file) {
-        String type = "music";
-        return entityService.fileUpload(file, type);
-    }
-
-
-
-
-}

+ 0 - 89
gis_cms/src/main/java/com/gis/cms/controller/StudentController.java

@@ -1,89 +0,0 @@
-package com.gis.cms.controller;
-
-import com.gis.cms.entity.dto.SortPageDto;
-import com.gis.cms.entity.dto.StudentDto;
-import com.gis.cms.entity.po.StudentEntity;
-import com.gis.cms.entity.po.VideoEntity;
-import com.gis.cms.service.StudentService;
-import com.gis.common.base.aop.WebControllerLog;
-import com.gis.common.util.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-/**
- * Created by owen on 2021/12/28 0008 9:54
- */
-@ApiIgnore
-@Slf4j
-@Api(tags = "学籍管理")
-@RestController
-@RequestMapping("cms/student")
-public class StudentController {
-
-    @Autowired
-    private StudentService entityService;
-
-
-    @ApiOperation(value = "列表")
-    @PostMapping("list")
-    public Result list(@RequestBody SortPageDto param) {
-        return entityService.search(param);
-    }
-
-
-    @WebControllerLog(description = "领导管理-新增/编辑", addDb = true)
-    @ApiOperation(value = "新增/编辑")
-    @PostMapping("save")
-    public Result save(@Valid @RequestBody StudentDto param) {
-        return entityService.saveEntity(param);
-    }
-
-    @ApiOperation("删除")
-    @GetMapping("remove/{id}")
-    public Result remove(@PathVariable Long id) {
-        return Result.success(entityService.removeById(id));
-    }
-
-    @ApiOperation("详情")
-    @GetMapping("detail/{id}")
-    public Result<StudentEntity> detail(@PathVariable Long id) {
-        return Result.success(entityService.getById(id));
-    }
-
-    @ApiOperation(value = "是否显示", notes = "display: 1:显示, 0:不显示")
-    @GetMapping(value = "display/{id}/{display}")
-    public Result<StudentEntity> display(@PathVariable Integer display, @PathVariable Long id) {
-        entityService.setDisplay(id, display);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "排序", notes = "sort: 序号")
-    @GetMapping(value = "sort/{id}/{sort}")
-    public Result<StudentEntity> sort(@PathVariable Integer sort, @PathVariable Long id) {
-        entityService.setSort(id, sort);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "图片上传")
-    @PostMapping("upload")
-    public Result upload(MultipartFile file) {
-        return entityService.upload(file);
-    }
-
-    @ApiOperation(value = "富文本-上传", notes = "类型type, img:图片, video:视频  ")
-    @PostMapping("rich/upload/{type}")
-    public Result richUpload(MultipartFile file, @PathVariable String type) {
-        return entityService.richUpload(file, type);
-    }
-
-
-
-
-}

+ 0 - 90
gis_cms/src/main/java/com/gis/cms/controller/VideoController.java

@@ -1,90 +0,0 @@
-package com.gis.cms.controller;
-
-import com.gis.cms.entity.dto.VideoDto;
-import com.gis.cms.entity.dto.SortPageDto;
-import com.gis.cms.entity.po.VideoEntity;
-import com.gis.cms.service.VideoService;
-import com.gis.common.base.aop.WebControllerLog;
-import com.gis.common.util.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-/**
- * Created by owen on 2021/12/28 0008 9:54
- */
-@ApiIgnore
-@Slf4j
-@Api(tags = "宣传片管理")
-@RestController
-@RequestMapping("cms/video")
-public class VideoController {
-
-    @Autowired
-    private VideoService entityService;
-
-
-    @ApiOperation(value = "列表")
-    @PostMapping("list")
-    public Result list(@RequestBody SortPageDto param) {
-        return entityService.search(param);
-    }
-
-
-    @WebControllerLog(description = "宣传片管理-新增/编辑", addDb = true)
-    @ApiOperation(value = "新增/编辑")
-    @PostMapping("save")
-    public Result save(@Valid @RequestBody VideoDto param) {
-        return entityService.saveEntity(param);
-    }
-
-
-    @ApiOperation("详情")
-    @GetMapping("detail/{id}")
-    public Result<VideoEntity> detail(@PathVariable Long id) {
-        return Result.success(entityService.getById(id));
-    }
-
-    @ApiOperation("删除")
-    @GetMapping("remove/{id}")
-    public Result<VideoEntity> remove(@PathVariable Long id) {
-        return Result.success(entityService.removeById(id));
-    }
-
-    @ApiOperation(value = "是否显示", notes = "display: 1:显示, 0:不显示")
-    @GetMapping(value = "display/{id}/{display}")
-    public Result<VideoEntity> display(@PathVariable Integer display, @PathVariable Long id) {
-        entityService.setDisplay(id, display);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "排序", notes = "sort: 序号")
-    @GetMapping(value = "sort/{id}/{sort}")
-    public Result<VideoEntity> sort(@PathVariable Integer sort, @PathVariable Long id) {
-        entityService.setSort(id, sort);
-        return Result.success();
-    }
-
-    @ApiOperation(value = "图片上传")
-    @PostMapping("upload")
-    public Result upload(MultipartFile file) {
-        return entityService.upload(file);
-    }
-
-    @ApiOperation(value = "视频上传")
-    @PostMapping("video/upload")
-    public Result videoUpload(MultipartFile file) {
-        String type = "video";
-        return entityService.videoUpload(file, type);
-    }
-
-
-
-
-}

+ 0 - 116
gis_cms/src/main/java/com/gis/cms/controller/WebController.java

@@ -1,116 +0,0 @@
-package com.gis.cms.controller;
-
-import com.gis.cms.entity.dto.GoodsPageDto;
-import com.gis.cms.entity.dto.SortPageDto;
-import com.gis.cms.entity.po.GoodsEntity;
-import com.gis.cms.entity.po.VideoEntity;
-import com.gis.cms.service.*;
-import com.gis.common.base.aop.WebControllerLog;
-import com.gis.common.util.Result;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.*;
-import springfox.documentation.annotations.ApiIgnore;
-
-import javax.validation.Valid;
-
-
-/**
- * Created by owen on 2020/5/8 0008 9:54
- */
-@ApiIgnore
-@Slf4j
-@Api(tags = "web-展示页")
-@RestController
-@RequestMapping("web")
-public class WebController {
-
-    @Autowired
-    WebService webService;
-
-    @Autowired
-    GoodsService goodsService;
-
-    @Autowired
-    VideoService videoService;
-
-    @Autowired
-    ImgService imgService;
-
-    @Autowired
-    MusicService musicService;
-
-    @Autowired
-    LeaderService leaderService;
-
-    @Autowired
-    StudentService studentService;
-
-
-
-
-//    @WebControllerLog(description = "展示页-清除所有缓存")
-//    @ApiOperation("清除所有缓存")
-//    @GetMapping("/clearCache")
-//    public Result clearCache(){
-//        return webService.clearCache();
-//    }
-
-    @ApiOperation(value = "文物列表")
-    @PostMapping("goodList")
-    public Result goodList(@Valid @RequestBody GoodsPageDto param) {
-        param.setDisplay(1);
-        param.setSortType(1);
-        return goodsService.search(param);
-    }
-
-    @ApiOperation("详情")
-    @GetMapping("goodDetail/{id}")
-    public Result<GoodsEntity> goodDetail(@PathVariable Long id) {
-        return goodsService.detail(id);
-    }
-
-    @ApiOperation(value = "学院宣传片列表")
-    @PostMapping("videoList")
-    public Result videoList(@RequestBody SortPageDto param) {
-        param.setDisplay(1);
-        param.setSortType(1);
-        return videoService.search(param);
-    }
-
-
-    @ApiOperation(value = "美丽校园列表")
-    @PostMapping("imgList")
-    public Result imgList(@RequestBody SortPageDto param) {
-        param.setDisplay(1);
-        param.setSortType(1);
-        return imgService.search(param);
-    }
-
-    @ApiOperation(value = "军歌列表")
-    @PostMapping("musicList")
-    public Result musicList(@RequestBody SortPageDto param) {
-        param.setDisplay(1);
-        param.setSortType(1);
-        return musicService.search(param);
-    }
-
-    @ApiOperation(value = "学生列表")
-    @PostMapping("studentList")
-    public Result studentList(@RequestBody SortPageDto param) {
-        param.setDisplay(1);
-        param.setSortType(1);
-        return studentService.search(param);
-    }
-
-    @ApiOperation(value = "领导列表")
-    @PostMapping("leaderList")
-    public Result leaderList(@RequestBody SortPageDto param) {
-        param.setDisplay(1);
-        param.setSortType(1);
-        return leaderService.search(param);
-    }
-
-}

+ 14 - 0
gis_cms/src/main/java/com/gis/cms/service/ApiDbService.java

@@ -0,0 +1,14 @@
+package com.gis.cms.service;
+
+import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.util.Result;
+
+/**
+ * Created by owen on 2022/5/11 0011 14:36
+ */
+public interface ApiDbService {
+
+    Result tables(PageDto param);
+
+    Result recordByTableId(Long tableId, PageDto param);
+}

+ 46 - 0
gis_cms/src/main/java/com/gis/cms/service/impl/ApiDbServiceImpl.java

@@ -0,0 +1,46 @@
+package com.gis.cms.service.impl;
+
+import com.gis.cms.service.ApiDbService;
+import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.base.service.IBaseService;
+import com.gis.common.util.EncryptUtils;
+import com.gis.common.util.Result;
+import com.gis.db.entity.dto.TablePageDto;
+import com.gis.db.service.FieldService;
+import com.gis.db.service.RecordService;
+import com.gis.db.service.TableService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by owen on 2022/5/11 0011 14:36
+ */
+@Slf4j
+@Service
+public class ApiDbServiceImpl implements ApiDbService {
+
+    @Autowired
+    TableService tableService;
+
+    @Autowired
+    IBaseService baseService;
+
+    @Autowired
+    FieldService fieldService;
+
+    @Override
+    public Result tables(PageDto param) {
+        TablePageDto dto = new TablePageDto();
+        BeanUtils.copyProperties(param, dto);
+        String projectId = baseService.getProjectId();
+        dto.setProjectId(projectId);
+        return tableService.getList(dto);
+    }
+
+    @Override
+    public Result recordByTableId(Long tableId, PageDto param) {
+        return fieldService.getFieldData(tableId, param);
+    }
+}

+ 2 - 6
gis_cms/src/main/java/com/gis/cms/service/impl/WebServiceImpl.java

@@ -1,11 +1,9 @@
 package com.gis.cms.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.gis.cms.entity.po.*;
 import com.gis.cms.entity.vo.ParkVo;
 import com.gis.cms.service.*;
-import com.gis.common.constant.TypeCode;
-import com.gis.common.util.RedisCache;
+import com.gis.common.util.RedisUtil;
 import com.gis.common.util.Result;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -13,9 +11,7 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.util.List;
 import java.util.Set;
-import java.util.concurrent.TimeUnit;
 
 
 /**
@@ -30,7 +26,7 @@ public class WebServiceImpl implements WebService {
     LeaderService aerialService;
 
     @Autowired
-    RedisCache redisCache;
+    RedisUtil redisCache;
 
     // 缓存key
     final static String CACHE_PART = "cache:part";

+ 46 - 0
gis_common/src/main/java/com/gis/common/base/controller/IpController.java

@@ -0,0 +1,46 @@
+package com.gis.common.base.controller;
+
+import com.gis.common.base.entity.dto.IdPageDto;
+import com.gis.common.base.entity.dto.IpDto;
+import com.gis.common.base.service.SysIpService;
+import com.gis.common.base.aop.WebControllerLog;
+import com.gis.common.util.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+
+
+/**
+ * Created by owen on 2022/5/11 0011 9:20
+ */
+@Api(tags = "sys-IP白名单管理")
+@RestController
+@RequestMapping("/sys/ip")
+public class IpController {
+
+    @Autowired
+    SysIpService entityService;
+
+    @WebControllerLog(description = "IP白名单-新增", addDb = true)
+    @ApiOperation(value = "新增IP白名单", notes = "项目id")
+    @PostMapping("/save")
+    public Result saveEntity(@Valid @RequestBody IpDto param) {
+        return entityService.saveEntity(param);
+    }
+
+    @ApiOperation(value = "列表")
+    @PostMapping("/getList")
+    public Result getList(@RequestBody IdPageDto param) {
+        return entityService.getList(param);
+    }
+
+
+    @ApiOperation(value = "删除")
+    @GetMapping("/removes/{ids}")
+    public Result removes(@PathVariable String ids){
+        return entityService.removes(ids);
+    }
+}

+ 14 - 0
gis_common/src/main/java/com/gis/common/base/entity/dto/IdPageDto.java

@@ -0,0 +1,14 @@
+package com.gis.common.base.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * Created by owen on 2022/5/11 0011 15:11
+ */
+@Data
+public class IdPageDto extends PageDto {
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+}

+ 34 - 0
gis_common/src/main/java/com/gis/common/base/entity/dto/IpDto.java

@@ -0,0 +1,34 @@
+package com.gis.common.base.entity.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+
+/**
+ * Created by Owen on 2019/10/28 0028 12:24
+ */
+@Data
+public class IpDto {
+
+
+    @ApiModelProperty(value = "id")
+    private Long id;
+
+    @NotBlank(message = "ip不能为空")
+    @ApiModelProperty(value = "ip地址" , required = true)
+    private String ip;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @NotNull(message = "项目id不能为空")
+    @ApiModelProperty(value = "项目id", required = true)
+    private Long projectId;
+
+
+
+
+}

+ 35 - 0
gis_common/src/main/java/com/gis/common/base/entity/po/SysIpEntity.java

@@ -0,0 +1,35 @@
+package com.gis.common.base.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.gis.common.base.entity.po.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * ip表, 只有ip存在的才允许访问接口
+ */
+@Data
+@TableName(value = "sys_ip")//指定表名
+public class SysIpEntity extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = -853504493430501564L;
+
+    @ApiModelProperty(value = "ip地址")
+    private String ip;
+
+    @ApiModelProperty(value = "项目id")
+    private Long projectId;
+
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+
+
+
+
+
+
+}

+ 50 - 0
gis_common/src/main/java/com/gis/common/base/service/IBaseService.java

@@ -0,0 +1,50 @@
+package com.gis.common.base.service;
+
+import com.gis.common.util.EncryptUtils;
+import com.gis.common.util.JwtUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * Created by owen on 2021/12/29 0029 14:12
+ */
+@Component
+public class IBaseService {
+
+    @Autowired
+    HttpServletRequest request;
+
+
+
+    public String getToken(){
+        return request.getHeader("token");
+    }
+
+    private String getAppId(){
+        return request.getHeader("appId");
+    }
+
+    /**登录用户id*/
+    public Long getUserId(){
+       return JwtUtil.getUserId(getToken());
+    }
+
+    public String getUserName(){
+        return JwtUtil.getUserName(getToken());
+    }
+
+    public Long getRoleId(){
+        return JwtUtil.getRoleId(getToken());
+    }
+
+    public Integer getIsAdmin(){
+        return JwtUtil.getIsAdmin(getToken());
+    }
+
+    public String getProjectId(){
+        return EncryptUtils.getId(getAppId());
+    }
+
+}

+ 25 - 0
gis_common/src/main/java/com/gis/common/base/service/SysIpService.java

@@ -0,0 +1,25 @@
+package com.gis.common.base.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gis.common.base.entity.dto.IdPageDto;
+import com.gis.common.base.entity.dto.IpDto;
+import com.gis.common.base.entity.po.SysIpEntity;
+import com.gis.common.util.Result;
+
+import java.util.List;
+
+/**
+ * Created by owen on 2022/5/11 0011 9:29
+ */
+public interface SysIpService extends IService<SysIpEntity> {
+
+
+
+    List<String> findByProjectId(String projectId);
+
+    Result getList(IdPageDto param);
+
+    Result removes(String ids);
+
+    Result saveEntity(IpDto param);
+}

+ 117 - 0
gis_common/src/main/java/com/gis/common/base/service/impl/SysIpServiceImpl.java

@@ -0,0 +1,117 @@
+package com.gis.common.base.service.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.collection.ListUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gis.common.base.entity.dto.IdPageDto;
+import com.gis.common.base.entity.dto.IpDto;
+import com.gis.common.base.entity.po.SysIpEntity;
+import com.gis.common.base.mapper.SysIpMapper;
+import com.gis.common.base.service.IBaseService;
+import com.gis.common.base.service.SysIpService;
+import com.gis.common.base.exception.BaseRuntimeException;
+import com.gis.common.util.BaseUtil;
+import com.gis.common.util.Result;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Created by owen on 2022/5/11 0011 9:31
+ */
+@Slf4j
+@Service
+public class SysIpServiceImpl extends ServiceImpl<SysIpMapper, SysIpEntity> implements SysIpService {
+
+
+    @Autowired
+    IBaseService baseService;
+
+//    @Override
+//    public Result add(String projectId, String ip) {
+//
+//
+//        // 检查
+//        SysIpEntity entity = findByProjectIdAndIp(projectId, ip);
+//        if (entity==null){
+//            entity = new SysIpEntity();
+//            entity.setIp(ip);
+//            entity.setProjectId(Long.valueOf(projectId));
+//            entity.setCreatorId(baseService.getUserId());
+//            this.save(entity);
+//        }
+//        return Result.success(entity);
+//    }
+
+    @Override
+    public List<String> findByProjectId(String projectId) {
+        return baseMapper.findByProjectId(projectId);
+    }
+
+    @Override
+    public Result getList(IdPageDto param) {
+        BaseUtil.startPage(param);
+        Long projectId = param.getId();
+        BaseRuntimeException.isNull(projectId, null, "项目id不能为空");
+        LambdaQueryWrapper<SysIpEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysIpEntity::getProjectId, projectId);
+
+        String searchKey = param.getSearchKey();
+        wrapper.eq(StrUtil.isNotBlank(searchKey), SysIpEntity::getIp, searchKey);
+
+        wrapper.orderByDesc(SysIpEntity::getCreateTime);
+        IPage<SysIpEntity> iPage = this.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
+        return Result.success(iPage);
+    }
+
+    @Override
+    public Result removes(String ids) {
+        String[] split = ids.split(",");
+        this.removeByIds(Arrays.asList(split));
+        return Result.success();
+    }
+
+    @Override
+    public Result saveEntity(IpDto param) {
+//        Integer exist = baseMapper.existProjectById(param.getProjectId().toString());
+//        BaseRuntimeException.isTrue(exist==0, null, "项目不存在");
+        Long id = param.getId();
+        Long projectId = param.getProjectId();
+        String ip = param.getIp();
+        SysIpEntity entity;
+        if (id == null){
+            // 检查
+            entity = findByProjectIdAndIp(projectId, ip);
+            if (entity==null){
+                entity = new SysIpEntity();
+                BeanUtils.copyProperties(param, entity);
+                entity.setCreatorId(baseService.getUserId());
+                this.save(entity);
+            }
+        } else {
+            entity = getById(id);
+            BeanUtils.copyProperties(param, entity);
+            this.updateById(entity);
+        }
+        return Result.success(entity);
+    }
+
+
+    public SysIpEntity findByProjectIdAndIp(Long projectId, String ip){
+        LambdaQueryWrapper<SysIpEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysIpEntity::getIp, ip);
+        wrapper.eq(SysIpEntity::getProjectId, projectId);
+        return this.getOne(wrapper, true);
+
+    }
+}

+ 72 - 0
gis_common/src/main/java/com/gis/common/config/FastJson2JsonRedisSerializer.java

@@ -0,0 +1,72 @@
+package com.gis.common.config;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.parser.ParserConfig;
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.type.TypeFactory;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.SerializationException;
+import org.springframework.util.Assert;
+
+import java.nio.charset.Charset;
+
+/**
+ * Redis使用FastJson序列化
+ * 
+ * @author fdkk
+ */
+public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
+{
+    @SuppressWarnings("unused")
+    private ObjectMapper objectMapper = new ObjectMapper();
+
+    public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
+
+    private Class<T> clazz;
+
+    static
+    {
+        ParserConfig.getGlobalInstance().setAutoTypeSupport(true);
+    }
+
+    public FastJson2JsonRedisSerializer(Class<T> clazz)
+    {
+        super();
+        this.clazz = clazz;
+    }
+
+    @Override
+    public byte[] serialize(T t) throws SerializationException
+    {
+        if (t == null)
+        {
+            return new byte[0];
+        }
+        return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
+    }
+
+    @Override
+    public T deserialize(byte[] bytes) throws SerializationException
+    {
+        if (bytes == null || bytes.length <= 0)
+        {
+            return null;
+        }
+        String str = new String(bytes, DEFAULT_CHARSET);
+
+        return JSON.parseObject(str, clazz);
+    }
+
+    public void setObjectMapper(ObjectMapper objectMapper)
+    {
+        Assert.notNull(objectMapper, "'objectMapper' must not be null");
+        this.objectMapper = objectMapper;
+    }
+
+    protected JavaType getJavaType(Class<?> clazz)
+    {
+        return TypeFactory.defaultInstance().constructType(clazz);
+    }
+}

+ 0 - 57
gis_common/src/main/java/com/gis/common/config/MyRedisConfig.java

@@ -1,57 +0,0 @@
-package com.gis.common.config;
-
-import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-
-import java.net.UnknownHostException;
-
-/**
- * Created by owen on 2021/7/16 0016 17:21
- *
- * redis 全局序列化
- * redis管理界面可以看到参数
- * 对象序列化有字段泛型字段值不丢失
- */
-
-@Configuration
-public class MyRedisConfig {
-
-
-
-        @Bean
-        public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
-            RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
-            redisTemplate.setConnectionFactory(connectionFactory);
-
-            // 使用Jackson2JsonRedisSerialize替换默认序列化
-            Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
-
-            ObjectMapper objectMapper = new ObjectMapper();
-            objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
-            objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
-
-            jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
-
-            // 设置key和value的序列化规则
-            redisTemplate.setKeySerializer(new StringRedisSerializer());
-//            redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
-            redisTemplate.setHashKeySerializer(new StringRedisSerializer());
-            redisTemplate.setHashValueSerializer(new StringRedisSerializer());
-            redisTemplate.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
-
-            redisTemplate.afterPropertiesSet();
-
-            return redisTemplate;
-
-        }
-
-
-}

+ 143 - 0
gis_common/src/main/java/com/gis/common/config/RedisConfig.java

@@ -0,0 +1,143 @@
+package com.gis.common.config;
+
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.JsonTypeInfo;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.jsontype.impl.LaissezFaireSubTypeValidator;
+import org.springframework.cache.CacheManager;
+import org.springframework.cache.annotation.CachingConfigurerSupport;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.core.script.DefaultRedisScript;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
+import org.springframework.data.redis.serializer.RedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+import javax.annotation.Resource;
+import java.time.Duration;
+
+/**
+ * redis配置
+ * 
+ * @author fdkk
+ */
+@Configuration
+@EnableCaching
+public class RedisConfig extends CachingConfigurerSupport
+{
+
+    /**
+     * by owen 2022-5-5
+     * 缓存对象序列化
+     * @param connectionFactory
+     * @return
+     */
+    @Bean
+    @SuppressWarnings(value = { "unchecked", "rawtypes" })
+    public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory)
+    {
+        RedisTemplate<Object, Object> template = new RedisTemplate<>();
+        template.setConnectionFactory(connectionFactory);
+
+        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
+
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance, ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
+        serializer.setObjectMapper(mapper);
+
+        // 使用StringRedisSerializer来序列化和反序列化redis的key值
+        template.setKeySerializer(new StringRedisSerializer());
+        template.setValueSerializer(serializer);
+
+        // Hash的key也采用StringRedisSerializer的序列化方式
+        template.setHashKeySerializer(new StringRedisSerializer());
+        template.setHashValueSerializer(serializer);
+
+        template.afterPropertiesSet();
+        return template;
+    }
+
+    @Bean
+    public DefaultRedisScript<Long> limitScript()
+    {
+        DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
+        redisScript.setScriptText(limitScriptText());
+        redisScript.setResultType(Long.class);
+        return redisScript;
+    }
+
+    /**
+     * 限流脚本
+     */
+    private String limitScriptText()
+    {
+        return "local key = KEYS[1]\n" +
+                "local count = tonumber(ARGV[1])\n" +
+                "local time = tonumber(ARGV[2])\n" +
+                "local current = redis.call('get', key);\n" +
+                "if current and tonumber(current) > count then\n" +
+                "    return tonumber(current);\n" +
+                "end\n" +
+                "current = redis.call('incr', key)\n" +
+                "if tonumber(current) == 1 then\n" +
+                "    redis.call('expire', key, time)\n" +
+                "end\n" +
+                "return tonumber(current);";
+    }
+
+
+    @Resource
+    private LettuceConnectionFactory lettuceConnectionFactory;
+
+
+    /**
+     * by owen 2022-5-5
+     * 配置CacheManager
+     * 配置key 过期时间
+     *
+     * @return
+     */
+    @Bean
+    public CacheManager cacheManager() {
+        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
+//        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
+        FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
+
+        //解决查询缓存转换异常的问题
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        serializer.setObjectMapper(om);
+
+
+
+        // 配置序列化(解决乱码的问题)
+        RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
+//                .entryTtl(Duration.ZERO)
+                .entryTtl(Duration.ofSeconds(20))   //设置缓存失效时间
+                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
+                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(serializer))
+                .disableCachingNullValues();
+
+        RedisCacheManager cacheManager = RedisCacheManager.builder(lettuceConnectionFactory)
+                .cacheDefaults(config)
+                .withCacheConfiguration("module", config.entryTtl(Duration.ofMinutes(5))) // module类型过期时间5分钟
+                .build();
+        return cacheManager;
+    }
+
+
+
+
+
+
+
+}

+ 1 - 0
gis_common/src/main/java/com/gis/common/constant/ErrorEnum.java

@@ -8,6 +8,7 @@ public enum ErrorEnum {
     FAILURE_SYS_2001(2001, "对象不存在"),
     FAILURE_SYS_2010(2010, "表名重复"),
     FAILURE_SYS_2011(2011, "字段为空"),
+    FAILURE_SYS_2020(2020, "appId为空"),
 
 
     FAILURE_CODE_3001(3001, "缺少必要参数"),

+ 86 - 0
gis_common/src/main/java/com/gis/common/filter/ApiInterceptor.java

@@ -0,0 +1,86 @@
+package com.gis.common.filter;
+
+import cn.hutool.core.util.StrUtil;
+import com.gis.common.base.service.SysIpService;
+import com.gis.common.base.exception.BaseRuntimeException;
+import com.gis.common.constant.ErrorEnum;
+import com.gis.common.util.EncryptUtils;
+import com.gis.common.util.RedisUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.MDC;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by owen on 2022/5/15.
+ * 规则:
+ * 1. projectId -> 加密出appId
+ * 2. 应用携带appId到header key=appId
+ * 3. 校验 -> 解密出projectId -> 查询ip百名单
+ */
+@Slf4j
+@Component
+public class ApiInterceptor implements HandlerInterceptor {
+
+    @Autowired
+    SysIpService ipService;
+
+    private long startTime;
+
+    // redis key
+    static final String APP_KEY = "appId:";
+
+    @Autowired
+    RedisUtil redisUtil;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        startTime = System.currentTimeMillis();
+
+        // 设置链路id, 在logback-spring.xml里用
+        MDC.put("TRACE_ID", startTime + "");
+
+        String requestURI = request.getRequestURI();
+        String remoteAddr = request.getRemoteAddr();
+        log.info("请求ip: {}, 请求路径: {}", remoteAddr, requestURI);
+
+        String appId = request.getHeader("appId");
+        BaseRuntimeException.isBlank(appId, ErrorEnum.FAILURE_SYS_2020);
+        log.info("appId: {}", appId);
+
+        // 内网访问,直接放行
+        if (remoteAddr.startsWith("192.168") || remoteAddr.startsWith("127.0.0") || remoteAddr.startsWith("localhost")) {
+            return true;
+        }
+
+        String appKey = APP_KEY + appId;
+        // redis存在,直接放行
+        if (redisUtil.hasKey(appKey)) {
+            log.info("redis存在直接放行");
+            return true;
+        }
+
+
+        // 解密appId
+        String projectId = EncryptUtils.getId(appId);
+
+        // 校验appId登记id是否跟请求ip类型一致
+        List<String> ips= ipService.findByProjectId(projectId);
+        if (!ips.contains(remoteAddr)) {
+            String errorMsg = StrUtil.format("此ip: {} 没有登记, 拒绝访问", remoteAddr);
+            log.error(errorMsg);
+            BaseRuntimeException.getExc(null, errorMsg);
+            return false;
+        }
+        redisUtil.setEx(appKey, appId, 3, TimeUnit.SECONDS);
+
+        return true;
+    }
+
+}

+ 140 - 0
gis_common/src/main/java/com/gis/common/util/EncryptUtils.java

@@ -0,0 +1,140 @@
+package com.gis.common.util;
+
+/**
+ * Created by owen on 2022/1/14.
+ * 字符串加密,生产appId
+ */
+
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.util.DigestUtils;
+
+import javax.crypto.Cipher;
+import javax.crypto.SecretKey;
+import javax.crypto.SecretKeyFactory;
+import javax.crypto.spec.DESKeySpec;
+import javax.crypto.spec.IvParameterSpec;
+import java.nio.charset.StandardCharsets;
+
+/**
+ * 加密
+ * @author by owen
+ * @date 2022-5-11
+ */
+@Slf4j
+public class EncryptUtils {
+
+    private static String strParam = "Passw0rd";
+
+    private static Cipher cipher;
+
+    private static IvParameterSpec iv = new IvParameterSpec(strParam.getBytes(StandardCharsets.UTF_8));
+
+    private static DESKeySpec getDesKeySpec(String source) throws Exception {
+        if (source == null || source.length() == 0) {
+            return null;
+        }
+        cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
+        String strKey = "Passw0rd";
+        return new DESKeySpec(strKey.getBytes(StandardCharsets.UTF_8));
+    }
+
+    /**
+     * 对称加密
+     */
+    public static String desEncrypt(String source) throws Exception {
+        DESKeySpec desKeySpec = getDesKeySpec(source);
+        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
+        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
+        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
+        return byte2hex(
+                cipher.doFinal(source.getBytes(StandardCharsets.UTF_8))).toUpperCase();
+    }
+
+    /**
+     * 对称解密
+     */
+    public static String desDecrypt(String source) throws Exception {
+        byte[] src = hex2byte(source.getBytes());
+        DESKeySpec desKeySpec = getDesKeySpec(source);
+        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
+        SecretKey secretKey = keyFactory.generateSecret(desKeySpec);
+        cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
+        byte[] retByte = cipher.doFinal(src);
+        return new String(retByte);
+    }
+
+    private static String byte2hex(byte[] inStr) {
+        String stmp;
+        StringBuilder out = new StringBuilder(inStr.length * 2);
+        for (byte b : inStr) {
+            stmp = Integer.toHexString(b & 0xFF);
+            if (stmp.length() == 1) {
+                // 如果是0至F的单位字符串,则添加0
+                out.append("0").append(stmp);
+            } else {
+                out.append(stmp);
+            }
+        }
+        return out.toString();
+    }
+
+    private static byte[] hex2byte(byte[] b) {
+        int size = 2;
+        if ((b.length % size) != 0) {
+            throw new IllegalArgumentException("长度不是偶数");
+        }
+        byte[] b2 = new byte[b.length / 2];
+        for (int n = 0; n < b.length; n += size) {
+            String item = new String(b, n, 2);
+            b2[n / 2] = (byte) Integer.parseInt(item, 16);
+        }
+        return b2;
+    }
+
+    /**
+     * 解密appId
+     * @param appId
+     * @return
+     */
+    public static String getId(String appId){
+        try {
+            String projectIdStr = EncryptUtils.desDecrypt(appId);
+            log.info("appId info: {}", projectIdStr);
+            String[] split = projectIdStr.split(":");
+            return split[1];
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+
+    /**
+     * 密码加密
+     * @param password
+     * @return
+     */
+    public static String encryptPassword(String password) {
+        return DigestUtils.md5DigestAsHex(password.getBytes());
+    }
+
+
+    public static void main(String[] args) throws Exception {
+        // 4814145A145D580BD13FB29276F43DE2387C61954A22E2D6
+//        String str = "8.135.106.227:biguiyuan";
+
+        // CBFA2F1815E8828F9E28D73B5D6A57836BFECEDEBEDA387F
+//        String str = "221.4.210.172:biguiyuan";
+
+
+
+
+
+
+
+//        System.out.println(desEncrypt(str));
+        System.out.println(desDecrypt("CBFA2F1815E8828F9E28D73B5D6A57836BFECEDEBEDA387F"));
+    }
+}

+ 77 - 51
gis_common/src/main/java/com/gis/common/util/JwtUtil.java

@@ -9,6 +9,7 @@ import io.jsonwebtoken.JwtBuilder;
 import io.jsonwebtoken.Jwts;
 import io.jsonwebtoken.SignatureAlgorithm;
 import lombok.extern.log4j.Log4j2;
+import lombok.extern.slf4j.Slf4j;
 import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.util.Assert;
@@ -16,7 +17,7 @@ import org.springframework.util.Assert;
 import javax.servlet.http.HttpServletRequest;
 import java.util.*;
 
-@Log4j2
+@Slf4j
 public class JwtUtil {
 
     //生成签名的时候使用的秘钥secret
@@ -73,6 +74,52 @@ public class JwtUtil {
     }
 
 
+    public static String createJWT(long ttlMillis, Map<String, Object> paramMap) {
+        //指定签名的时候使用的签名算法,也就是header那部分,jjwt已经将这部分内容封装好了。
+        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
+
+        String userName = paramMap.get("userName").toString();
+
+        //生成JWT的时间
+        long nowMillis = System.currentTimeMillis();
+        Date now = new Date(nowMillis);
+
+        //创建payload的私有声明(根据特定的业务需要添加,如果要拿这个做验证,一般是需要和jwt的接收方提前沟通好验证方式的)
+        Map<String, Object> claims = new HashMap<String, Object>();
+
+        for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
+            claims.put(entry.getKey(), entry.getValue());
+        }
+
+
+        //下面就是在为payload添加各种标准声明和私有声明了
+        //这里其实就是new一个JwtBuilder,设置jwt的body
+        JwtBuilder builder = Jwts.builder()
+                //如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的
+                .setClaims(claims)
+                //设置jti(JWT ID):是JWT的唯一标识,根据业务需要,这个可以设置为一个不重复的值,主要用来作为一次性token,从而回避重放攻击。
+                .setId(UUID.randomUUID().toString())
+                //iat: jwt的签发时间
+                .setIssuedAt(now)
+                //代表这个JWT的主体,即它的所有人,这个是一个json格式的字符串,可以存放什么userid,roldid之类的,作为什么用户的唯一标志。
+                .setSubject(userName)
+                //设置签名使用的签名算法和签名使用的秘钥
+                .signWith(signatureAlgorithm, SECRET);
+
+        if (ttlMillis >= 0) {
+            long expMillis = nowMillis + ttlMillis;
+            Date exp = new Date(expMillis);
+            //设置过期时间
+            builder.setExpiration(exp);
+        }/*else{
+            //设置过期时间半小时
+            DateTime expDate = new DateTime().plusMinutes(30);
+            builder.setExpiration(expDate.toDate());
+        }*/
+        return builder.compact();
+    }
+
+
     /**
      * Token的解密
      *
@@ -126,7 +173,7 @@ public class JwtUtil {
      *
      * @return token中包含的用户名
      */
-    public static String getUsername(String token) {
+    public static String getUserName(String token) {
         DecodedJWT jwt = JWT.decode(token);
         Claim userName = jwt.getClaim("userName");
         Assert.notNull(userName, "token userName is null ");
@@ -134,57 +181,16 @@ public class JwtUtil {
     }
 
 
-    public static List getUserRole(String token) {
+    public static List getRoleKeys(String token) {
         DecodedJWT jwt = JWT.decode(token);
-        Claim role = jwt.getClaim("role");
+        Claim role = jwt.getClaim("roleKeys");
         Assert.notNull(role, "token role is null ");
         return role.as(List.class);
     }
 
 
-    public static String createJWT(long ttlMillis, Map<String, Object> paramMap) {
-        //指定签名的时候使用的签名算法,也就是header那部分,jjwt已经将这部分内容封装好了。
-        SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;
-
-        String userName = paramMap.get("userName").toString();
-
-        //生成JWT的时间
-        long nowMillis = System.currentTimeMillis();
-        Date now = new Date(nowMillis);
-
-        //创建payload的私有声明(根据特定的业务需要添加,如果要拿这个做验证,一般是需要和jwt的接收方提前沟通好验证方式的)
-        Map<String, Object> claims = new HashMap<String, Object>();
-        claims.put("userName", userName);
-        claims.put("id", paramMap.get("id"));
-        claims.put("role", paramMap.get("role"));
-        claims.put("manager", paramMap.get("manager"));
 
-        //下面就是在为payload添加各种标准声明和私有声明了
-        //这里其实就是new一个JwtBuilder,设置jwt的body
-        JwtBuilder builder = Jwts.builder()
-                //如果有私有声明,一定要先设置这个自己创建的私有的声明,这个是给builder的claim赋值,一旦写在标准的声明赋值之后,就是覆盖了那些标准的声明的
-                .setClaims(claims)
-                //设置jti(JWT ID):是JWT的唯一标识,根据业务需要,这个可以设置为一个不重复的值,主要用来作为一次性token,从而回避重放攻击。
-                .setId(UUID.randomUUID().toString())
-                //iat: jwt的签发时间
-                .setIssuedAt(now)
-                //代表这个JWT的主体,即它的所有人,这个是一个json格式的字符串,可以存放什么userid,roldid之类的,作为什么用户的唯一标志。
-                .setSubject(userName)
-                //设置签名使用的签名算法和签名使用的秘钥
-                .signWith(signatureAlgorithm, SECRET);
 
-        if (ttlMillis >= 0) {
-            long expMillis = nowMillis + ttlMillis;
-            Date exp = new Date(expMillis);
-            //设置过期时间
-            builder.setExpiration(exp);
-        }/*else{
-            //设置过期时间半小时
-            DateTime expDate = new DateTime().plusMinutes(30);
-            builder.setExpiration(expDate.toDate());
-        }*/
-        return builder.compact();
-    }
 
     /**
      * 获取用户id
@@ -196,6 +202,26 @@ public class JwtUtil {
         return id.asLong();
     }
 
+    /**
+     * 获取用户id
+     */
+    public static Long getRoleId(String token) {
+        DecodedJWT jwt = JWT.decode(token);
+        Claim id = jwt.getClaim("roleId");
+        Assert.notNull(id, "token id is null ");
+        return id.asLong();
+    }
+
+    /**
+     * 获取用户id
+     */
+    public static Integer getIsAdmin(String token) {
+        DecodedJWT jwt = JWT.decode(token);
+        Claim id = jwt.getClaim("isAdmin");
+        Assert.notNull(id, "token id is null ");
+        return id.asInt();
+    }
+
 
 
 
@@ -218,11 +244,11 @@ public class JwtUtil {
         System.out.println(exp);
     }
 
-    public static void test2() {
-        String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsInJvbGUiOlsiYWRtaW4iLCJyb290Il0sImlkIjoxLCJ1c2VyTmFtZSI6ImFkbWluIiwiaWF0IjoxNTgzODA5MzkzLCJqdGkiOiJkNjZiZTFkYi00MTQ0LTQxMTYtYTNlNi01ZDBjNjhlNTI3ODAifQ.-4AdsVP2RwmPS2grtO4aC8ov9PwkilzaGdThGetBJok";
-        System.out.println(getUserRole(token));
-
-    }
+//    public static void test2() {
+//        String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsInJvbGUiOlsiYWRtaW4iLCJyb290Il0sImlkIjoxLCJ1c2VyTmFtZSI6ImFkbWluIiwiaWF0IjoxNTgzODA5MzkzLCJqdGkiOiJkNjZiZTFkYi00MTQ0LTQxMTYtYTNlNi01ZDBjNjhlNTI3ODAifQ.-4AdsVP2RwmPS2grtO4aC8ov9PwkilzaGdThGetBJok";
+//        System.out.println(getUserRole(token));
+//
+//    }
 
     public static void test3() {
         HashMap<String, Object> map = new HashMap<>();
@@ -255,7 +281,7 @@ public class JwtUtil {
     @Test
     public void testCheckToken(){
         String token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMzExMjMxMTE3OCIsInVzZXJOYW1lIjoiMTMxMTIzMTExNzgiLCJpYXQiOjE2MTM2MjAzNjcsImp0aSI6IjMyYTAwZDNiLTE2ODctNDUzNi04NmIwLWY4OTMzODQzNzNjMiJ9.5sV47Yf0HU4m6u77jmCziR3KhAGfiL5aUKxo57MImTI";
-        String username = getUsername(token);
+        String username = getUserName(token);
         Long userId = getUserId(token);
         System.out.println(username);
         System.out.println("id: " + userId );

+ 1 - 1
gis_common/src/main/java/com/gis/common/util/PasswordUtils.java

@@ -171,7 +171,7 @@ public class PasswordUtils {
 
     public static void main(String[] args) {
 
-        String userName = "hao";
+        String userName = "shaogen";
         String password = "123456";
 
 

文件差異過大導致無法顯示
+ 0 - 1187
gis_common/src/main/java/com/gis/common/util/RedisCache.java


文件差異過大導致無法顯示
+ 1117 - 99
gis_common/src/main/java/com/gis/common/util/RedisUtil.java


+ 38 - 0
gis_common/src/main/java/com/gis/common/util/ResponseUtils.java

@@ -0,0 +1,38 @@
+package com.gis.common.util;
+
+import com.alibaba.fastjson.JSONObject;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.ServletResponse;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * Created by owen on 2022/1/17.
+ */
+public class ResponseUtils {
+
+
+    /**
+     * 无需转发,直接返回Response信息
+     *
+     */
+    public static void writeResponse(ServletResponse response, JSONObject msg) {
+        response.setCharacterEncoding("UTF-8");
+        response.setContentType("application/json; charset=utf-8");
+        ServletOutputStream outputStream = null;
+        try {
+            outputStream = response.getOutputStream();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        assert outputStream != null;
+        PrintWriter printWriter = new PrintWriter(outputStream, true);
+        printWriter.write(msg.toString());//直接将json输出到页面
+        printWriter.flush();
+        printWriter.close();
+
+    }
+
+
+}

+ 0 - 5
gis_db/src/main/java/com/gis/db/controller/FieldController.java

@@ -1,18 +1,13 @@
 package com.gis.db.controller;
 
-import com.gis.common.base.entity.dto.PageDto;
 import com.gis.common.util.Result;
 import com.gis.db.entity.dto.FieldDto;
 import com.gis.db.entity.dto.FieldPageDto;
 import com.gis.db.entity.dto.IdsDto;
-import com.gis.db.entity.dto.TableDto;
-import com.gis.db.entity.po.FieldEntity;
 import com.gis.db.service.DdlService;
 import com.gis.db.service.FieldService;
-import com.gis.db.service.TableService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.ibatis.annotations.Param;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;

+ 4 - 2
gis_db/src/main/java/com/gis/db/controller/ProjectController.java

@@ -39,13 +39,13 @@ public class ProjectController {
     }
 
     @ApiOperation(value = "详情")
-    @PostMapping("/detail/{id}")
+    @GetMapping("/detail/{id}")
     public Result detail(@PathVariable Long id){
         return Result.success(entityService.getById(id));
     }
 
     @ApiOperation(value = "删除")
-    @PostMapping("/remove/{id}")
+    @GetMapping("/remove/{id}")
     public Result remove(@PathVariable Long id){
         return Result.success(entityService.removeById(id));
     }
@@ -53,4 +53,6 @@ public class ProjectController {
 
 
 
+
+
 }

+ 1 - 1
gis_db/src/main/java/com/gis/db/controller/TableController.java

@@ -18,7 +18,7 @@ import javax.validation.Valid;
  */
 @Api(tags = "db-表相关接口")
 @RestController
-@RequestMapping("db/table")
+@RequestMapping("/db/table")
 public class TableController {
 
     @Autowired

+ 3 - 1
gis_db/src/main/java/com/gis/db/mapper/ProjectMapper.java

@@ -7,6 +7,7 @@ import com.gis.db.entity.po.FieldEntity;
 import com.gis.db.entity.po.ProjectEntity;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -16,5 +17,6 @@ import java.util.Map;
 @Mapper
 public interface ProjectMapper extends BaseMapper<ProjectEntity> {
 
-
+    @Update("update sys_project set app_id=#{appId} where id=#{id}")
+    void setAppId(String appId, Long id);
 }

+ 1 - 5
gis_db/src/main/java/com/gis/db/service/ProjectService.java

@@ -3,13 +3,8 @@ package com.gis.db.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.gis.common.base.entity.dto.PageDto;
 import com.gis.common.util.Result;
-import com.gis.db.entity.dto.IdsDto;
 import com.gis.db.entity.dto.ProjectDto;
-import com.gis.db.entity.dto.TableDto;
 import com.gis.db.entity.po.ProjectEntity;
-import com.gis.db.entity.po.TableEntity;
-
-import java.util.List;
 
 /**
  * Created by owen on 2022/3/10 0010 17:29
@@ -19,4 +14,5 @@ public interface ProjectService extends IService<ProjectEntity> {
     Result pageList(PageDto param);
 
     Result saveEntity(ProjectDto param);
+
 }

+ 37 - 1
gis_db/src/main/java/com/gis/db/service/impl/ProjectServiceImpl.java

@@ -6,10 +6,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gis.admin.entity.po.SysUserEntity;
+import com.gis.admin.service.SysUserService;
 import com.gis.common.base.entity.dto.PageDto;
 import com.gis.common.base.exception.BaseRuntimeException;
+import com.gis.common.base.service.IBaseService;
 import com.gis.common.constant.ErrorEnum;
 import com.gis.common.util.BaseUtil;
+import com.gis.common.util.EncryptUtils;
 import com.gis.common.util.Result;
 import com.gis.db.entity.dto.ProjectDto;
 import com.gis.db.entity.po.ProjectEntity;
@@ -17,6 +21,7 @@ import com.gis.db.mapper.ProjectMapper;
 import com.gis.db.service.ProjectService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 
@@ -28,12 +33,26 @@ import org.springframework.stereotype.Service;
 @Service
 public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, ProjectEntity> implements ProjectService {
 
+    // 生成appId加盐
+    static final String APP_SALT = "projectId:";
+
+    @Autowired
+    IBaseService baseService;
+
+    @Autowired
+    SysUserService userService;
+
 
     @Override
     public Result pageList(PageDto param) {
         BaseUtil.startPage(param);
         IPage<ProjectEntity> page = new Page<>(param.getPageNum() , param.getPageSize());
         LambdaQueryWrapper<ProjectEntity> wrapper = new LambdaQueryWrapper<>();
+        // 授权才能看到响应的项目
+        if (baseService.getIsAdmin()==0){
+            SysUserEntity entity = userService.cacheByUserName(baseService.getUserName());
+            wrapper.in(ProjectEntity::getId, entity.getProjectIds());
+        }
         String searchKey = param.getSearchKey();
         wrapper.like(StrUtil.isNotBlank(searchKey), ProjectEntity::getName, searchKey);
         wrapper.orderByDesc(ProjectEntity::getCreateTime);
@@ -45,16 +64,33 @@ public class ProjectServiceImpl extends ServiceImpl<ProjectMapper, ProjectEntity
     @Override
     public Result saveEntity(ProjectDto param) {
         ProjectEntity entity;
+        boolean flag = false;
         Long id = param.getId();
         if (id == null){
             entity = new ProjectEntity();
-            entity.setAppId(RandomUtil.randomString(9));
+            entity.setCreatorId(baseService.getUserId());
+            flag = true;
         } else {
             entity = getById(id);
             BaseRuntimeException.isNull(entity, ErrorEnum.FAILURE_SYS_2001);
         }
         BeanUtils.copyProperties(param, entity);
+
         this.saveOrUpdate(entity);
+        // 创建appId
+        if (flag){
+            createAppId(entity.getId());
+        }
         return Result.success(entity);
     }
+
+    private String createAppId(Long id) {
+        try {
+            String appId = EncryptUtils.desEncrypt(APP_SALT + id);
+            baseMapper.setAppId(appId, id);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }

+ 0 - 1
gis_db/src/main/java/com/gis/db/service/impl/TableServiceImpl.java

@@ -78,7 +78,6 @@ public class TableServiceImpl extends ServiceImpl<TableMapper, TableEntity> impl
     @Override
     public Result removes(IdsDto param) {
 
-
         // 删除表
         List<Integer> tableIds = param.getIds();
         List<String> tableNames = this.getTableNameByTableId(tableIds);