dsx 2 years ago
parent
commit
e0d564f1f3

+ 1 - 1
src/main/java/com/fdkankan/scene/controller/SceneController.java

@@ -48,7 +48,7 @@ public class SceneController extends BaseController {
     @GetMapping(value = "/getInfo")
     public SceneInfoVO getInfo(@Validated SceneInfoParamVO param) throws Exception{
         param.setReqType(SceneInfoReqType.VIEW.code());
-        return sceneEditInfoService.getSceneInfo(param);
+        return sceneEditInfoService.getSceneInfo(param, request);
     }
 
     /**

+ 6 - 1
src/main/java/com/fdkankan/scene/controller/SceneEditController.java

@@ -138,6 +138,7 @@ public class SceneEditController extends BaseController {
      * @param num
      * @return com.fdkankan.web.response.ResultData
      **/
+    @CheckPermit
     @PostMapping(value = "/tag/list")
     public ResultData listTags(@RequestParam(value = "num") String num) throws Exception {
         return sceneProService.listTags(num);
@@ -354,10 +355,11 @@ public class SceneEditController extends BaseController {
      * @param param
      * @return com.fdkankan.scene.vo.SceneInfoVO
      **/
+    @CheckPermit
     @GetMapping(value = "/getInfo")
     public SceneInfoVO getInfo(@Validated SceneInfoParamVO param) throws Exception{
         param.setReqType(SceneInfoReqType.EDIT.code());
-        return sceneEditInfoService.getSceneInfo(param);
+        return sceneEditInfoService.getSceneInfo(param, request);
     }
 
     /**
@@ -631,11 +633,13 @@ public class SceneEditController extends BaseController {
         return sceneEditService.deleteTour(param);
     }
 
+    @CheckPermit
     @PostMapping(value = "/tour/video/upload")
     public ResultData uploadTourVideo(@RequestParam("num") String num, @RequestParam("file") MultipartFile file) throws Exception {
         return downloadTourVideoService.uploadTourVideo(num, file);
     }
 
+    @CheckPermit
     @PostMapping(value = "/tour/video/download")
     public ResultData downloadTourVideo(@RequestParam("num") String num) throws Exception {
         return downloadTourVideoService.downloadTourVideo(num);
@@ -821,6 +825,7 @@ public class SceneEditController extends BaseController {
      * 上传二维码和分享的logo
      * @return
      */
+    @CheckPermit
     @PostMapping(value = "/uploadShareLogo")
     public ResultData uploadShareLogo(@RequestParam("num") String num, @RequestParam("file") MultipartFile file) throws Exception {
         return scenePlusService.uploadShareLogo(num, file);

+ 11 - 0
src/main/java/com/fdkankan/scene/service/IJmgaService.java

@@ -0,0 +1,11 @@
+package com.fdkankan.scene.service;
+
+import com.fdkankan.scene.vo.SceneInfoParamVO;
+
+import java.util.Map;
+
+public interface IJmgaService {
+
+    public Map<String, Object> checkSceneViewGign(SceneInfoParamVO param) throws Exception;
+
+}

+ 3 - 1
src/main/java/com/fdkankan/scene/service/ISceneEditInfoService.java

@@ -28,6 +28,8 @@ import java.util.List;
 
 import org.springframework.web.multipart.MultipartFile;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  *  服务类
@@ -46,7 +48,7 @@ public interface ISceneEditInfoService extends IService<SceneEditInfo> {
 
     ResultData publicScene(SceneEditInfoParamVO param) throws Exception;
 
-    SceneInfoVO getSceneInfo(SceneInfoParamVO param) throws Exception;
+    SceneInfoVO getSceneInfo(SceneInfoParamVO param, HttpServletRequest request) throws Exception;
 
 //    ResultData saveUpload(SaveUploadParamVO param) throws Exception;
 

+ 111 - 0
src/main/java/com/fdkankan/scene/service/impl/JmgaServiceImpl.java

@@ -0,0 +1,111 @@
+package com.fdkankan.scene.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.HttpUtil;
+import com.fdkankan.common.constant.ErrorCode;
+import com.fdkankan.common.exception.BusinessException;
+import com.fdkankan.common.util.DateExtUtil;
+import com.fdkankan.scene.service.IJmgaService;
+import com.fdkankan.scene.vo.SceneInfoParamVO;
+import com.fdkankan.web.util.WebUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.config.annotation.RefreshScope;
+import org.springframework.stereotype.Service;
+
+import javax.crypto.BadPaddingException;
+import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
+import javax.crypto.spec.SecretKeySpec;
+import javax.servlet.http.HttpServletRequest;
+import java.nio.charset.StandardCharsets;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.*;
+
+@Slf4j
+@RefreshScope
+@Service
+public class JmgaServiceImpl implements IJmgaService {
+
+    @Value("${scene.view.encrypt-key:3d8904474ebbdbbd81c5952524dad646}")
+    private String ENCRYPT_KEY;
+
+    @Override
+    public Map<String, Object> checkSceneViewGign(SceneInfoParamVO param, HttpServletRequest request) throws Exception{
+
+        Map<String, Object> result = new HashMap<>();
+        String sign = param.getSign();
+        if(StrUtil.isEmpty(sign)){
+            result.put("flag", true);
+            return result;
+        }
+        String userName = null, ip = null, timestamp = null;
+        result.put("flag", false);
+        String[] split = null;
+        try {byte[] raw = ENCRYPT_KEY.getBytes(StandardCharsets.UTF_8);
+            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+            SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+            cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+            byte[] encrypted1 = Base64.getDecoder().decode(sign);
+            byte[] original = cipher.doFinal(encrypted1);
+
+            //字节转换字符串
+            String decode = new String(original, StandardCharsets.UTF_8);
+            split = decode.split("@");
+
+        }catch (Exception e){
+            log.error("签名解密失败", e);
+            throw new BusinessException(ErrorCode.AUTH_FAIL.code(), "签名解密失败");
+        }
+
+        if(split.length == 1){
+            return result;
+        }
+
+        for (int i = 0; i < split.length; i++){
+            if(i == 0){
+                userName = split[i];
+            }
+            if(i == 1){
+                ip = split[i];
+            }
+            if(i == 2){
+                timestamp = split[i];
+            }
+        }
+        result.put("userName", userName);
+
+        String ipAddress = WebUtil.getIpAddress(request);
+        if(StrUtil.isNotEmpty(ip) && !ip.equals(ipAddress)){
+            return result;
+        }
+
+        if(StrUtil.isNotEmpty(timestamp) && Calendar.getInstance().getTime().after(new Date(Long.valueOf(timestamp) * 1000))){
+            return result;
+        }
+
+        result.put("flag", true);
+        return result;
+    }
+
+    public static void main(String[] args) throws NoSuchPaddingException, NoSuchAlgorithmException, BadPaddingException, IllegalBlockSizeException, InvalidKeyException {
+
+        String sign = "P9md4QmKxb4VvpUY1pSnG3ycLyJ7c95mloXRrp50m+J6lhs0WHHD5rtPTSI8TXKC";
+        String ENCRYPT_KEY = "3d8904474ebbdbbd81c5952524dad646";
+        byte[] raw = ENCRYPT_KEY.getBytes(StandardCharsets.UTF_8);
+        Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
+        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
+        cipher.init(Cipher.DECRYPT_MODE, skeySpec);
+        byte[] encrypted1 = Base64.getDecoder().decode(sign);
+        byte[] original = cipher.doFinal(encrypted1);
+
+        //字节转换字符串
+        String decode = new String(original, StandardCharsets.UTF_8);
+        System.out.println(decode);
+        String[] split = decode.split("@");
+        int length = split.length;
+
+    }
+}

+ 13 - 3
src/main/java/com/fdkankan/scene/service/impl/SceneEditInfoServiceImpl.java

@@ -105,6 +105,8 @@ import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -444,7 +446,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
     }
 
     @Override
-    public SceneInfoVO getSceneInfo(@Var SceneInfoParamVO param) throws Exception{
+    public SceneInfoVO getSceneInfo(@Var SceneInfoParamVO param, HttpServletRequest request) throws Exception{
         SceneInfoReqType sceneInfoReqType = SceneInfoReqType.get(param.getReqType());
         switch (sceneInfoReqType){
             //如果是编辑页面请求,查数据库
@@ -452,7 +454,7 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
                 return this.getSceneInfo4Edit(param.getNum());
             //如果是查看页面请求,查redis
             case VIEW:
-                return this.getSceneInfo4View(param.getNum());
+                return this.getSceneInfo4View(param);
         }
         return null;
     }
@@ -583,7 +585,15 @@ public class SceneEditInfoServiceImpl extends ServiceImpl<ISceneEditInfoMapper,
      * @param num
      * @return com.fdkankan.scene.vo.SceneInfoVO
      **/
-    private SceneInfoVO getSceneInfo4View(String num) throws Exception{
+    private SceneInfoVO  getSceneInfo4View(SceneInfoParamVO param, HttpServletRequest request) throws Exception{
+
+        String num = param.getNum();
+        // TODO: 2023/8/18 优先校验加密串,如果加密串有且校验通过,直接返回场景数据
+        String sign = param.getSign();
+
+
+        // TODO: 2023/8/18 判断是否有业务授权限制,如果有且账号密码空或者不正确,需要返回需要登录表示
+
 
         //校验场景是否为空、封存、计算中
         ScenePlus scenePlus = scenePlusService.checkSceneAvail(num);

+ 6 - 0
src/main/java/com/fdkankan/scene/vo/SceneInfoParamVO.java

@@ -32,5 +32,11 @@ public class SceneInfoParamVO {
      */
     private Byte reqType;
 
+    private String sign;
+
+    private String userName;
+
+    private String password;
+
 
 }