Browse Source

提供api 接口
处理角色删除bug

wuweihao 3 years ago
parent
commit
7660ef8fe0
33 changed files with 2116 additions and 1386 deletions
  1. 4 1
      README.md
  2. 0 26
      gis_admin/src/main/java/com/gis/admin/controller/ApiController.java
  3. 2 2
      gis_admin/src/main/java/com/gis/admin/controller/LoginController.java
  4. 4 1
      gis_admin/src/main/java/com/gis/admin/mapper/provider/SysRoleProvider.java
  5. 3 0
      gis_admin/src/main/java/com/gis/admin/service/SysRoleService.java
  6. 7 1
      gis_admin/src/main/java/com/gis/admin/service/impl/SysRoleServiceImpl.java
  7. 3 0
      gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java
  8. 3 16
      gis_admin/src/main/java/com/gis/admin/shiro/ShiroRealm.java
  9. 33 0
      gis_cms/src/main/java/com/gis/cms/controller/ApiController.java
  10. 1 1
      gis_cms/src/main/java/com/gis/cms/controller/WebController.java
  11. 3 0
      gis_cms/src/main/java/com/gis/cms/entity/po/HotelEntity.java
  12. 122 0
      gis_cms/src/main/java/com/gis/cms/entity/vo/HotelVo.java
  13. 7 0
      gis_cms/src/main/java/com/gis/cms/mapper/HotelMapper.java
  14. 6 2
      gis_cms/src/main/java/com/gis/cms/service/HotelService.java
  15. 10 0
      gis_cms/src/main/java/com/gis/cms/service/impl/HotelServiceImpl.java
  16. 47 0
      gis_common/src/main/java/com/gis/common/base/controller/IpController.java
  17. 14 0
      gis_common/src/main/java/com/gis/common/base/entity/dto/IdPageDto.java
  18. 35 0
      gis_common/src/main/java/com/gis/common/base/entity/dto/IpDto.java
  19. 36 0
      gis_common/src/main/java/com/gis/common/base/entity/po/SysIpEntity.java
  20. 2 2
      gis_common/src/main/java/com/gis/common/base/exception/BaseRuntimeException.java
  21. 22 0
      gis_common/src/main/java/com/gis/common/base/mapper/SysIpMapper.java
  22. 28 0
      gis_common/src/main/java/com/gis/common/base/service/SysIpService.java
  23. 103 0
      gis_common/src/main/java/com/gis/common/base/service/impl/SysIpServiceImpl.java
  24. 72 0
      gis_common/src/main/java/com/gis/common/config/FastJson2JsonRedisSerializer.java
  25. 0 57
      gis_common/src/main/java/com/gis/common/config/MyRedisConfig.java
  26. 143 0
      gis_common/src/main/java/com/gis/common/config/RedisConfig.java
  27. 16 0
      gis_common/src/main/java/com/gis/common/config/WebMvcConfig.java
  28. 4 0
      gis_common/src/main/java/com/gis/common/constant/ErrorEnum.java
  29. 95 0
      gis_common/src/main/java/com/gis/common/filter/ApiInterceptor.java
  30. 158 0
      gis_common/src/main/java/com/gis/common/util/EncryptUtils.java
  31. 0 1187
      gis_common/src/main/java/com/gis/common/util/RedisCache.java
  32. 1127 90
      gis_common/src/main/java/com/gis/common/util/RedisUtil.java
  33. 6 0
      pom.xml

+ 4 - 1
README.md

@@ -4,4 +4,7 @@
 原型:https://lanhuapp.com/url/aFtBT
 
 # sit 
-    2022-3-26 已部署项目sit 8.135.106.227 gov_zhuhai_isolation_8014
+    2022-3-26 已部署项目sit 8.135.106.227 gov_zhuhai_isolation_8014
+    
+    对外域名:8.135.106.227:8014 ->  sit-isolation.4dage.com  香洲区隔离酒店
+    https://sit-isolation.4dage.com/doc.html#/home

+ 0 - 26
gis_admin/src/main/java/com/gis/admin/controller/ApiController.java

@@ -1,26 +0,0 @@
-package com.gis.admin.controller;
-
-import com.gis.common.util.Result;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-import springfox.documentation.annotations.ApiIgnore;
-
-import java.time.LocalDateTime;
-
-/**
- * Created by owen on 2021/7/7 0007 8:27
- */
-@ApiIgnore
-@Api(tags = "api-demo")
-@RestController
-@RequestMapping("api")
-public class ApiController {
-
-
-    @GetMapping("test")
-    public Result test(){
-        return Result.success("我是api: " +  LocalDateTime.now());
-    }
-}

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

@@ -132,7 +132,7 @@ public class LoginController {
         // 保存操作日志
         saveLog(userId);
 
-        redisUtil.set(configConstant.redisPrefix + token, token, 86400);
+        redisUtil.setCacheObject(configConstant.redisPrefix + token, token, 23, TimeUnit.HOURS);
 
 
         return Result.success(result);
@@ -146,7 +146,7 @@ public class LoginController {
         if (StringUtils.isBlank(token)) {
             log.info("token is null");
         }
-        redisUtil.del(configConstant.redisPrefix + token);
+        redisUtil.delete(configConstant.redisPrefix + token);
         return Result.success();
     }
 

+ 4 - 1
gis_admin/src/main/java/com/gis/admin/mapper/provider/SysRoleProvider.java

@@ -13,7 +13,10 @@ public class SysRoleProvider {
 
     public String search(PageDto param) {
         StringBuffer sql = new StringBuffer(
-                "select a.*, count(b.user_id) as count from sys_role a left JOIN sys_user_role b on b.role_id=a.id WHERE a.is_delete=0 ");
+                "select a.*, count(b.user_id) as count from sys_role a left JOIN sys_user_role b on b.role_id=a.id " +
+                        " WHERE a.is_delete=0  ");
+
+
 
         String searchKey = param.getSearchKey();
         if (!StringUtils.isAllBlank(searchKey)) {

+ 3 - 0
gis_admin/src/main/java/com/gis/admin/service/SysRoleService.java

@@ -45,5 +45,8 @@ public interface SysRoleService extends IService<SysRoleEntity> {
     // 更新用户角色
     void updateUserRole(Long userId, Long roleId);
 
+    // 删除中间表的旧用户id
+    void deleteUserRoleByUserId(Long userId);
+
 
 }

+ 7 - 1
gis_admin/src/main/java/com/gis/admin/service/impl/SysRoleServiceImpl.java

@@ -155,6 +155,12 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRoleEntity
     }
 
     @Override
+    public void deleteUserRoleByUserId(Long userId) {
+        // 删除中间表的旧用户id
+        entityMapper.deleteUserRoleByUserId(userId);
+    }
+
+    @Override
     public SysRoleEntity findByUserId(Long userId) {
         return entityMapper.findByUserId(userId);
     }
@@ -217,7 +223,7 @@ public class SysRoleServiceImpl extends ServiceImpl<SysRoleMapper, SysRoleEntity
         LambdaQueryWrapper<SysRoleEntity> wrapper = new LambdaQueryWrapper<>();
         wrapper.eq(SysRoleEntity::getRoleName, roleName);
         long count = this.count(wrapper);
-        BaseRuntimeException.isHas(count > 0, null, "角色名称已存在");
+        BaseRuntimeException.isTrue(count > 0, null, "角色名称已存在");
     }
 
 }

+ 3 - 0
gis_admin/src/main/java/com/gis/admin/service/impl/SysUserServiceImpl.java

@@ -99,6 +99,9 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUserEntity
                 log.error("管理员账户不能删除 {}", entity.getId());
                 return Result.failure("管理员账户不能删除");
             }
+            // 删除中间表关系
+            roleService.deleteUserRoleByUserId(entity.getId());
+
         }
         this.removeByIds(idList);
 

+ 3 - 16
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: 用户登录鉴权和获取用户授权
@@ -36,25 +33,16 @@ import java.util.Set;
 @Component
 @Slf4j
 public class ShiroRealm extends AuthorizingRealm {
-//	@Lazy
-//    @Resource
-//    private CommonAPI commonAPI;
-
-//    @Lazy
-//    @Resource
-//    private RedisUtil redisUtil;
 
     @Resource
     HttpServletRequest request;
 
-//    @Autowired
-//    SysResourceService sysResourceService;
+
 
     @Autowired
     SysUserService sysUserService;
 
-//    @Autowired
-//    RedisTemplate<String, String> redisTemplate;
+
 
     @Autowired
     ConfigConstant configConstant;
@@ -141,8 +129,7 @@ public class ShiroRealm extends AuthorizingRealm {
             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");

+ 33 - 0
gis_cms/src/main/java/com/gis/cms/controller/ApiController.java

@@ -0,0 +1,33 @@
+package com.gis.cms.controller;
+
+import com.gis.cms.entity.vo.HotelVo;
+import com.gis.cms.service.HotelService;
+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.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+
+/**
+ * Created by owen on 2022/5/16 0016 10:11
+ */
+@Api(tags = "开放api")
+@RestController
+@RequestMapping("/api")
+public class ApiController {
+
+    @Autowired
+    HotelService hotelService;
+
+    @ApiOperation(value = "列表")
+    @PostMapping("/list")
+    public Result<List<HotelVo>> apiList() {
+        return hotelService.apiList();
+    }
+}

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

@@ -15,7 +15,7 @@ import javax.validation.Valid;
  */
 @Api(tags = "v0.1-展示端")
 @RestController
-@RequestMapping("web")
+@RequestMapping("/web")
 public class WebController {
 
     @Autowired

+ 3 - 0
gis_cms/src/main/java/com/gis/cms/entity/po/HotelEntity.java

@@ -81,6 +81,9 @@ public class HotelEntity extends BaseEntity implements Serializable {
     @ApiModelProperty(value = "次密人数数")
     private Integer touchSecond;
 
+    @ApiModelProperty(value = "预订数")
+    private Integer book;
+
 
 
 

+ 122 - 0
gis_cms/src/main/java/com/gis/cms/entity/vo/HotelVo.java

@@ -0,0 +1,122 @@
+package com.gis.cms.entity.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.gis.common.base.entity.po.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.persistence.Column;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 酒店
+ */
+@Data
+public class HotelVo  implements Serializable {
+
+
+    private static final long serialVersionUID = 7757696085922846L;
+
+    @ApiModelProperty(value = "对象ID")
+    private Long id;
+
+    @ApiModelProperty(value = "创建时间")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "修改时间")
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "是否删除:0代表未删除 , 1代表已经删除,默认写0")
+    private Integer isDelete;
+
+    @ApiModelProperty(value = "酒店名称")
+    private String name;
+
+//    @ApiModelProperty(value = "状态 > 0:可用, 1:储备, 2:应急储备")
+//    private Integer status;
+//
+//    @ApiModelProperty(value = "区域 > 1:香洲区, 2:斗门去, 3:金湾区")
+//    private Integer zone;
+//
+//    @ApiModelProperty(value = "管理单位")
+//    private String unit;
+//
+//    @ApiModelProperty(value = "用途 > 1:本土人员-密接, 2:本土人员-次密, 3:入境人员, 4:国内中高风险, 5:其他-海外中高风险, 6:其他-走私偷渡, 7:其他-转运司机, 8:待定")
+//    private String type;
+
+    @ApiModelProperty(value = "酒店地址")
+    private String address;
+
+    @ApiModelProperty(value = "跳转地址")
+    private String link;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+
+//    @ApiModelProperty(value = "显示:1:显示, 0:不显示(默认)")
+//    private Integer display;
+
+//    @ApiModelProperty(value = "联系人, 允许多个")
+//    private String contact;
+
+
+    @ApiModelProperty(value = "房间总数")
+    private Integer total;
+
+    @ApiModelProperty(value = "房间已使用")
+    private Integer used;
+
+    @ApiModelProperty(value = "房间可用")
+    private Integer usable;
+
+    @ApiModelProperty(value = "其他房间数")
+    private Integer other;
+
+    @ApiModelProperty(value = "隔离房间数")
+    private Integer roomIsolation;
+
+
+//    @ApiModelProperty(value = "创建者id")
+//    private Long creatorId;
+
+//    @ApiModelProperty(value = "lng")
+//    private String lng;
+//
+//    @ApiModelProperty(value = "lat")
+//    private String lat;
+
+    @ApiModelProperty(value = "密接人数")
+    private Integer touch;
+
+    @ApiModelProperty(value = "次密人数数")
+    private Integer touchSecond;
+
+    @ApiModelProperty(value = "预订数")
+    private Integer book;
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}

+ 7 - 0
gis_cms/src/main/java/com/gis/cms/mapper/HotelMapper.java

@@ -4,12 +4,16 @@ package com.gis.cms.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.gis.cms.entity.po.HotelEntity;
+import com.gis.cms.entity.vo.HotelVo;
 import com.gis.common.base.mapper.provider.BaseProvider;
 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;
+
 @Component
 @Mapper
 public interface HotelMapper extends BaseMapper<HotelEntity> {
@@ -19,4 +23,7 @@ public interface HotelMapper extends BaseMapper<HotelEntity> {
 
     @SelectProvider(type = BaseProvider.class, method = "runSql")
     IPage<HotelEntity> search(String sqlStr, IPage<HotelEntity> page);
+
+    @Select("select * from tb_hotel")
+    List<HotelVo> apiList();
 }

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

@@ -6,8 +6,11 @@ import com.gis.cms.entity.dto.HotelDto;
 import com.gis.cms.entity.dto.HotelPageDto;
 import com.gis.cms.entity.dto.RoomDto;
 import com.gis.cms.entity.po.HotelEntity;
+import com.gis.cms.entity.vo.HotelVo;
 import com.gis.common.util.Result;
 
+import java.util.List;
+
 
 /**
  * Created by owen on 2021/12/8 0011 16:14
@@ -28,6 +31,7 @@ public interface HotelService extends IService<HotelEntity> {
     Result info();
 
     Result detail(Long id);
-//
-//    Result isolationInfo();
+
+    Result<List<HotelVo>> apiList();
+
 }

+ 10 - 0
gis_cms/src/main/java/com/gis/cms/service/impl/HotelServiceImpl.java

@@ -2,6 +2,7 @@ package com.gis.cms.service.impl;
 
 import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -10,6 +11,7 @@ import com.gis.cms.entity.dto.HotelDto;
 import com.gis.cms.entity.dto.HotelPageDto;
 import com.gis.cms.entity.dto.RoomDto;
 import com.gis.cms.entity.po.HotelEntity;
+import com.gis.cms.entity.vo.HotelVo;
 import com.gis.cms.mapper.HotelMapper;
 import com.gis.cms.service.HotelService;
 import com.gis.common.base.exception.BaseRuntimeException;
@@ -126,6 +128,12 @@ public class HotelServiceImpl extends ServiceImpl<HotelMapper, HotelEntity> impl
     }
 
     @Override
+    public Result<List<HotelVo>> apiList() {
+        List<HotelVo> list = baseMapper.apiList();
+        return Result.success(list);
+    }
+
+    @Override
     public void setDisplay(Long id, Integer display) {
         getBaseMapper().setDisplay(id, display);
     }
@@ -136,6 +144,7 @@ public class HotelServiceImpl extends ServiceImpl<HotelMapper, HotelEntity> impl
         BaseRuntimeException.isNull(entity, ErrorEnum.FAILURE_SYS_2001);
         BeanUtils.copyProperties(param, entity);
         this.updateById(entity);
+        // todo 2022-5-16 主动更新合作商数据
         return Result.success();
     }
 
@@ -205,6 +214,7 @@ public class HotelServiceImpl extends ServiceImpl<HotelMapper, HotelEntity> impl
 
 
 
+
     @Override
     public Result saveEntity(HotelDto param) {
         Long id = param.getId();

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

@@ -0,0 +1,47 @@
+package com.gis.common.base.controller;
+
+import com.gis.common.base.aop.WebControllerLog;
+import com.gis.common.base.entity.dto.IdPageDto;
+import com.gis.common.base.entity.dto.IpDto;
+import com.gis.common.base.entity.dto.PageDto;
+import com.gis.common.base.service.SysIpService;
+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 PageDto 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;
+}

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

@@ -0,0 +1,35 @@
+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;
+
+
+//    @NotBlank(message = "身份不能为空")
+//    @ApiModelProperty(value = "身份(项目类型)", required = true)
+//    private String identifier;
+
+
+
+
+}

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

@@ -0,0 +1,36 @@
+package com.gis.common.base.entity.po;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+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 = "身份(项目类型)")
+    private String identifier;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "创建者id")
+    private Long creatorId;
+
+
+
+
+
+
+
+}

+ 2 - 2
gis_common/src/main/java/com/gis/common/base/exception/BaseRuntimeException.java

@@ -94,7 +94,7 @@ public class BaseRuntimeException extends RuntimeException{
      * @param obj true 存在抛异常
      * @param errorEnum
      */
-    public static void isHas(boolean obj, ErrorEnum errorEnum){
+    public static void isTrue(boolean obj, ErrorEnum errorEnum){
         if (obj){
             getExc(errorEnum.code(), errorEnum.message());
         }
@@ -106,7 +106,7 @@ public class BaseRuntimeException extends RuntimeException{
      * @param code 允许为null
      * @param msg
      */
-    public static void isHas(boolean obj, Integer code, String msg){
+    public static void isTrue(boolean obj, Integer code, String msg){
         if (obj){
             getExc(code, msg);
         }

+ 22 - 0
gis_common/src/main/java/com/gis/common/base/mapper/SysIpMapper.java

@@ -0,0 +1,22 @@
+package com.gis.common.base.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gis.common.base.entity.po.SysIpEntity;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+
+@Component
+@Mapper
+public interface SysIpMapper extends BaseMapper<SysIpEntity> {
+
+    @Select("select ip from sys_ip where is_delete=0 and project_id=#{projectId}")
+    List<String> findByProjectId(String projectId);
+
+    @Select("select id from sys_project where is_delete=0 and id=#{projectId}")
+    Integer existProjectById(String projectId);
+}

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

@@ -0,0 +1,28 @@
+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.dto.PageDto;
+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(PageDto param);
+
+    Result removes(String ids);
+
+    Result saveEntity(IpDto param);
+
+    SysIpEntity findByIdentifier(String appId);
+}

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

@@ -0,0 +1,103 @@
+package com.gis.common.base.service.impl;
+
+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.dto.PageDto;
+import com.gis.common.base.entity.po.SysIpEntity;
+import com.gis.common.base.exception.BaseRuntimeException;
+import com.gis.common.base.mapper.SysIpMapper;
+import com.gis.common.base.service.SysIpService;
+import com.gis.common.util.BaseUtil;
+import com.gis.common.util.EncryptUtils;
+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 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;
+
+    /**
+     * appId加盐
+     */
+    static final String SLAT_APP = "ip";
+
+
+    @Override
+    public List<String> findByProjectId(String projectId) {
+        return baseMapper.findByProjectId(projectId);
+    }
+
+    @Override
+    public Result getList(PageDto param) {
+        BaseUtil.startPage(param);
+        LambdaQueryWrapper<SysIpEntity> wrapper = new LambdaQueryWrapper<>();
+
+        String searchKey = param.getSearchKey();
+        wrapper.like(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) {
+        Long id = param.getId();
+        SysIpEntity entity;
+        if (id == null) {
+
+            entity = new SysIpEntity();
+            BeanUtils.copyProperties(param, entity);
+            String appId = EncryptUtils.createAppId(param.getIp(), SLAT_APP);
+            entity.setIdentifier(appId);
+            entity.setCreatorId(baseService.getUserId());
+            this.save(entity);
+        } else {
+            entity = getById(id);
+            BeanUtils.copyProperties(param, entity);
+            this.updateById(entity);
+        }
+        return Result.success(entity);
+    }
+
+    @Override
+    public SysIpEntity findByIdentifier(String appId) {
+        LambdaQueryWrapper<SysIpEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysIpEntity::getIdentifier, appId);
+        return this.getOne(wrapper, true);
+    }
+
+
+    public SysIpEntity findByIdentifierAndIp(String identifier, String ip) {
+        LambdaQueryWrapper<SysIpEntity> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(SysIpEntity::getIp, ip);
+        wrapper.eq(SysIpEntity::getIdentifier, identifier);
+        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;
+    }
+
+
+
+
+
+
+
+}

+ 16 - 0
gis_common/src/main/java/com/gis/common/config/WebMvcConfig.java

@@ -4,12 +4,14 @@ import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.alibaba.fastjson.support.config.FastJsonConfig;
 import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
 import com.gis.common.constant.ConfigConstant;
+import com.gis.common.filter.ApiInterceptor;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.MediaType;
 import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
 import java.util.ArrayList;
@@ -24,6 +26,9 @@ public class WebMvcConfig implements WebMvcConfigurer {
     @Autowired
     ConfigConstant configConstant;
 
+    @Autowired
+    ApiInterceptor apiInterceptor;
+
     /**
      * 配置全局跨域
      * 开发、测试环境开启跨域, 正式环境不开启
@@ -75,5 +80,16 @@ public class WebMvcConfig implements WebMvcConfigurer {
     }
 
 
+    /**
+     * 自定义拦截规则
+     */
+    @Override
+    public void addInterceptors(InterceptorRegistry registry)
+    {
+        registry.addInterceptor(apiInterceptor).addPathPatterns("/api/**");
+    }
+
+
+
 
 }

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

@@ -6,6 +6,10 @@ package com.gis.common.constant;
 public enum ErrorEnum {
 
     FAILURE_SYS_2001(2001, "对象不存在"),
+    FAILURE_SYS_2010(2010, "表名重复"),
+    FAILURE_SYS_2011(2011, "字段为空"),
+    FAILURE_SYS_2020(2020, "appId为空"),
+
 
     FAILURE_CODE_3001(3001, "缺少必要参数"),
     FAILURE_CODE_3002(3002, "访问异常!"),

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

@@ -0,0 +1,95 @@
+package com.gis.common.filter;
+
+import cn.hutool.core.util.StrUtil;
+import com.gis.common.base.entity.po.SysIpEntity;
+import com.gis.common.base.exception.BaseRuntimeException;
+import com.gis.common.base.service.SysIpService;
+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);
+        String ip = EncryptUtils.getIp(appId);
+
+        // 校验appId登记id是否跟请求ip类型一致
+        SysIpEntity entity = ipService.findByIdentifier(appId);
+        if (!entity.getIp().equals(ip)){
+            String errorMsg = StrUtil.format("此ip: {} 没有登记, 拒绝访问", remoteAddr);
+            log.error(errorMsg);
+            BaseRuntimeException.getExc(null, errorMsg);
+            return false;
+        }
+//        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;
+    }
+
+}

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

@@ -0,0 +1,158 @@
+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 getIp(String appId){
+        try {
+            String projectIdStr = EncryptUtils.desDecrypt(appId);
+            log.info("appId info: {}", projectIdStr);
+            String[] split = projectIdStr.split(":");
+            return split[0];
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+
+    }
+
+    /**
+     * 创建appId
+     * @param ip ip
+     * @param identifier 唯一标识
+     * @return
+     */
+    public static String createAppId(String ip, String identifier){
+        String str = ip + ":" + identifier;
+        try {
+            return desEncrypt(str);
+        } 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"));
+    }
+}

File diff suppressed because it is too large
+ 0 - 1187
gis_common/src/main/java/com/gis/common/util/RedisCache.java


File diff suppressed because it is too large
+ 1127 - 90
gis_common/src/main/java/com/gis/common/util/RedisUtil.java


+ 6 - 0
pom.xml

@@ -81,6 +81,12 @@
         <version>${gis.version}</version>
       </dependency>
 
+      <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
+      <dependency>
+        <groupId>org.springframework</groupId>
+        <artifactId>spring-core</artifactId>
+        <version>5.2.20.RELEASE</version>
+      </dependency>