lyhzzz 1 ヶ月 前
コミット
09e9b4d0d6
22 ファイル変更200 行追加508 行削除
  1. 0 14
      src/main/java/com/fdkankan/ucenter/annotation/CheckInnerApiPermit.java
  2. 26 0
      src/main/java/com/fdkankan/ucenter/annotation/VerifySign.java
  3. 51 0
      src/main/java/com/fdkankan/ucenter/aop/SignVerifyAspect.java
  4. 0 21
      src/main/java/com/fdkankan/ucenter/controller/AppSecretController.java
  5. 2 0
      src/main/java/com/fdkankan/ucenter/controller/api/FusionController.java
  6. 0 35
      src/main/java/com/fdkankan/ucenter/controller/api/LaserApiController.java
  7. 3 0
      src/main/java/com/fdkankan/ucenter/controller/api/LaserController.java
  8. 7 0
      src/main/java/com/fdkankan/ucenter/controller/app/AppCameraController.java
  9. 10 0
      src/main/java/com/fdkankan/ucenter/controller/app/AppController.java
  10. 5 0
      src/main/java/com/fdkankan/ucenter/controller/app/AppSceneController.java
  11. 4 0
      src/main/java/com/fdkankan/ucenter/controller/app/AppUserController.java
  12. 17 6
      src/main/java/com/fdkankan/ucenter/controller/app/SceneApiController.java
  13. 10 20
      src/main/java/com/fdkankan/ucenter/controller/inner/InnerController.java
  14. 41 0
      src/main/java/com/fdkankan/ucenter/httpClient/SignInterceptor.java
  15. 2 1
      src/main/java/com/fdkankan/ucenter/httpClient/client/FdKKClient.java
  16. 2 1
      src/main/java/com/fdkankan/ucenter/httpClient/client/LaserClient.java
  17. 0 48
      src/main/java/com/fdkankan/ucenter/interceptor/CheckInnerApiPermitAspect.java
  18. 0 1
      src/main/java/com/fdkankan/ucenter/service/IInnerService.java
  19. 7 1
      src/main/java/com/fdkankan/ucenter/service/impl/AppService.java
  20. 0 39
      src/main/java/com/fdkankan/ucenter/service/impl/InnerServiceImpl.java
  21. 13 7
      src/main/java/com/fdkankan/ucenter/service/impl/LoginService.java
  22. 0 314
      src/main/java/com/fdkankan/ucenter/util/RsaUtils.java

+ 0 - 14
src/main/java/com/fdkankan/ucenter/annotation/CheckInnerApiPermit.java

@@ -1,14 +0,0 @@
-package com.fdkankan.ucenter.annotation;
-
-import java.lang.annotation.Documented;
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target({ElementType.METHOD})
-@Retention(RetentionPolicy.RUNTIME)
-@Documented
-public @interface CheckInnerApiPermit {
-    String description() default "";
-}

+ 26 - 0
src/main/java/com/fdkankan/ucenter/annotation/VerifySign.java

@@ -0,0 +1,26 @@
+package com.fdkankan.ucenter.annotation;
+
+import java.lang.annotation.*;
+
+/**
+ * 验签注解
+ * 被此注解标记的方法需要进行签名验证
+ */
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface VerifySign {
+    /**
+     * 是否启用验签,默认true
+     */
+    boolean enabled() default true;
+
+    /**
+     * 签名参数名,默认"sign"
+     */
+    String signParam() default "sign";
+    /**
+     * appId参数名,默认"appId"
+     */
+    String appId() default "appId";
+}

+ 51 - 0
src/main/java/com/fdkankan/ucenter/aop/SignVerifyAspect.java

@@ -0,0 +1,51 @@
+package com.fdkankan.ucenter.aop;
+
+import com.fdkankan.sign.SignUtils;
+import com.fdkankan.ucenter.annotation.VerifySign;
+import com.fdkankan.ucenter.common.constants.ResultCode;
+import com.fdkankan.ucenter.entity.AppSecret;
+import com.fdkankan.ucenter.exception.BusinessException;
+import com.fdkankan.ucenter.service.IAppSecretService;
+import org.apache.commons.lang3.StringUtils;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+@Aspect
+@Component
+public class SignVerifyAspect {
+
+    @Autowired
+    IAppSecretService appSecretService;
+
+    @Around("@annotation(verifySign)")
+    public Object verifySign(ProceedingJoinPoint joinPoint, VerifySign verifySign) throws Throwable {
+        if (!verifySign.enabled()) {
+            return joinPoint.proceed();
+        }
+        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
+        String header = request.getHeader("X-UA");
+        if(StringUtils.isNotBlank(header)){
+            return joinPoint.proceed();
+        }
+        String sign = request.getHeader(verifySign.signParam());
+        String appId = request.getHeader(verifySign.appId());
+
+        AppSecret byAppId = appSecretService.getByAppId(appId);
+        if(byAppId == null){
+            throw new BusinessException(ResultCode.SIGN_ERROR);
+        }
+        if(!SignUtils.checkSign(sign,appId,byAppId.getPrivateKey())){
+            throw new BusinessException(ResultCode.SIGN_ERROR);
+        }
+        return joinPoint.proceed();
+    }
+
+}

+ 0 - 21
src/main/java/com/fdkankan/ucenter/controller/AppSecretController.java

@@ -1,21 +0,0 @@
-package com.fdkankan.ucenter.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- *  前端控制器
- * </p>
- *
- * @author 
- * @since 2025-07-08
- */
-@RestController
-@RequestMapping("/ucenter/appSecret")
-public class AppSecretController {
-
-}
-

+ 2 - 0
src/main/java/com/fdkankan/ucenter/controller/api/FusionController.java

@@ -1,5 +1,6 @@
 package com.fdkankan.ucenter.controller.api;
 
+import com.fdkankan.ucenter.annotation.VerifySign;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.service.IFusionService;
@@ -23,6 +24,7 @@ public class FusionController extends BaseController {
      * 只需获取v4场景数据,无需文件夹
      */
     @PostMapping("/scene/list")
+    @VerifySign
     public Result sceneList(@RequestBody SceneParam param){
         String token = request.getHeader("token");
         return Result.success(fusionService.scenePageOnlyV4List(param,token));

+ 0 - 35
src/main/java/com/fdkankan/ucenter/controller/api/LaserApiController.java

@@ -1,35 +0,0 @@
-package com.fdkankan.ucenter.controller.api;
-
-import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.ucenter.common.Result;
-import com.fdkankan.ucenter.constant.LoginConstant;
-import com.fdkankan.ucenter.service.ISceneProService;
-import com.fdkankan.ucenter.vo.request.SceneParam;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@RestController
-@RequestMapping("/ucenter/inner")
-public class LaserApiController {
-
-    @Autowired
-    ISceneProService sceneProService;
-
-    /**
-     *
-     * 激光场景生成obj文件
-     */
-    @PostMapping(value = "/generateObjFile")
-    public Result generateObjFile(@RequestBody SceneParam requestScene) throws Exception{
-        String num = requestScene.getSceneNum();
-        if (StringUtils.isEmpty(num)) {
-            throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
-        }
-        sceneProService.generateObjFile(num);
-        return Result.success();
-    }
-}

+ 3 - 0
src/main/java/com/fdkankan/ucenter/controller/api/LaserController.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.controller.api;
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
 import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.ucenter.annotation.VerifySign;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.common.ResultData;
@@ -45,6 +46,7 @@ public class LaserController extends BaseController {
      * 根据手机号码获取 相机 sncode
      */
     @RequestMapping(value = "/getSnCodeByPhone",method = RequestMethod.GET)
+    @VerifySign
     public Result getSnCodeByUserName(@RequestParam(required = false)String phone,
                                       @RequestParam(required = false,defaultValue = "4")String sceneSource) throws Exception {
         if(StringUtils.isBlank(phone)){
@@ -98,6 +100,7 @@ public class LaserController extends BaseController {
      * 获取场景数据
      */
     @RequestMapping(value = "/getSceneByNum",method = RequestMethod.GET)
+    @VerifySign
     public Result getSceneByNum(@RequestParam(required = false)String num) throws Exception {
         ScenePro sceneProEntity = sceneProService.getByNum(num);
         LaserSceneVo vo = new LaserSceneVo();

+ 7 - 0
src/main/java/com/fdkankan/ucenter/controller/app/AppCameraController.java

@@ -1,6 +1,7 @@
 package com.fdkankan.ucenter.controller.app;
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.annotation.VerifySign;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.common.ResultData;
 import com.fdkankan.ucenter.constant.LoginConstant;
@@ -22,6 +23,7 @@ public class AppCameraController {
     private AppCameraService appCameraService;
 
     @PostMapping("/getCamerasForUser")
+    @VerifySign
     public Result getCamerasForUser(@RequestBody JSONObject param ){
         String userName = param.get("userName") == null ? null : param.getString("userName");
         Integer cameraType = param.get("cameraType") == null ? 4 : param.getInteger("cameraType");
@@ -35,6 +37,7 @@ public class AppCameraController {
      * 绑定相机
      */
     @PostMapping("/bindCamera")
+    @VerifySign
     public Result bindCamera(@RequestBody JSONObject param ){
         String userName = param.get("userName") == null ? null : param.getString("userName");
         String snCode = param.get("snCode") == null ? null : param.getString("snCode");
@@ -45,6 +48,7 @@ public class AppCameraController {
      * 解绑相机
      */
     @PostMapping("/unbind")
+    @VerifySign
     public Result unbind(@RequestBody JSONObject param ){
         String userName = param.get("userName") == null ? null : param.getString("userName");
         String childName = param.get("childName") == null ? null : param.getString("childName");
@@ -55,6 +59,7 @@ public class AppCameraController {
      * 获取相机信息
      */
     @PostMapping("/getCameraInfo")
+    @VerifySign
     public Result getCameraInfo(@RequestBody JSONObject param ){
         String childName = param.get("childName") == null ? null : param.getString("childName");
         String childPassword = param.get("childPassword") == null ? null : param.getString("childPassword");
@@ -65,6 +70,7 @@ public class AppCameraController {
      * 用户相机信息上报 app 需要调用
      */
     @RequestMapping(value = "/uploadUserCameraInfo", method = RequestMethod.POST)
+    @VerifySign
     public Result uploadUserCameraInfo(@RequestBody Map<String,String> param) throws Exception {
         if (ObjectUtils.isEmpty(param) || !param.containsKey("snCode") || !param.containsKey("cameraVersion")
                 || !param.containsKey("appVersion")) {
@@ -81,6 +87,7 @@ public class AppCameraController {
     }
 
     @GetMapping("/checkCameraSpace")
+    @VerifySign
     public Result checkCameraSpace(@RequestParam(required = false) String snCode,
                                    @RequestParam(required = false) String unicode){
 

+ 10 - 0
src/main/java/com/fdkankan/ucenter/controller/app/AppController.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.controller.app;
 
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.util.JwtUtil;
+import com.fdkankan.ucenter.annotation.VerifySign;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.service.impl.AppService;
@@ -27,6 +28,7 @@ public class AppController extends BaseController {
      * password 密码
      */
     @PostMapping("/userLogin")
+    @VerifySign
     public Result userLogin(@RequestBody LoginParam param){
         return Result.success(appService.login(param));
     }
@@ -38,6 +40,7 @@ public class AppController extends BaseController {
      * uuid
      */
     @PostMapping("/login")
+    @VerifySign
     public Result login(@RequestBody AppLoginParam param){
         appService.appLogin(param);
         return Result.success();
@@ -48,6 +51,7 @@ public class AppController extends BaseController {
      * appPassword  相机密码
      */
     @PostMapping("/login2")
+    @VerifySign
     public Result login2(@RequestBody AppLoginParam param){
         return Result.success(appService.login2(param));
     }
@@ -57,6 +61,7 @@ public class AppController extends BaseController {
      * @return
      */
     @PostMapping("/quickLogin")
+    @VerifySign
     public Result quickLogin(@RequestBody LoginParam param){
         return  Result.success(appService.quickLogin(param));
     }
@@ -67,6 +72,7 @@ public class AppController extends BaseController {
      * @return
      */
     @PostMapping("/register")
+    @VerifySign
     public Result register(@RequestBody RegisterParam param){
         param.setConfirmPwd(param.getPassword());
         param.setClear("YES");
@@ -79,6 +85,7 @@ public class AppController extends BaseController {
      * 登出
      */
     @RequestMapping(value = "/logout", method = RequestMethod.POST)
+    @VerifySign
     public Result logout() {
         appService.logout(getToken());
         return Result.success();
@@ -88,6 +95,7 @@ public class AppController extends BaseController {
      * app 获取随机昵称
      */
     @PostMapping("/getNickName")
+    @VerifySign
     public Result getNickName(){
         return Result.success(appService.getNickName());
     }
@@ -96,6 +104,7 @@ public class AppController extends BaseController {
      * 检测手机号码是否注册
      */
     @PostMapping("/checkUserName")
+    @VerifySign
     public Result checkUserName(@RequestBody AppLoginParam param){
         loginService.checkUser(param.getAppUserName(),false);
         return Result.success();
@@ -105,6 +114,7 @@ public class AppController extends BaseController {
      * 重置密码
      */
     @PostMapping("/resetPassword")
+    @VerifySign
     public Result resetPassword(@RequestBody RegisterParam param){
         param.setConfirmPwd(param.getPassword());
         param.setClear("YES");

+ 5 - 0
src/main/java/com/fdkankan/ucenter/controller/app/AppSceneController.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.controller.app;
 
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.util.SecurityUtil;
+import com.fdkankan.ucenter.annotation.VerifySign;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.service.ISceneProService;
@@ -25,6 +26,7 @@ public class AppSceneController extends BaseController {
      * 获取云端场景
      */
     @PostMapping("/getAppAllSceneByPage")
+    @VerifySign
     public Result getAppAllSceneByPage(@RequestBody AppSceneParam param){
         if(param.getCameraType() == 4){
             param.setCameraType(1);
@@ -36,6 +38,7 @@ public class AppSceneController extends BaseController {
      * 获取场景计算状态
      */
     @PostMapping("/getSceneStatusByUnicode")
+    @VerifySign
     public Result getSceneStatusByUnicode(@RequestBody JSONObject param){
         String appUserName = param.get("appUserName") == null ? null : param.getString("appUserName");
         String appPassword = param.get("appPassword") == null ? null : param.getString("appPassword");
@@ -50,6 +53,7 @@ public class AppSceneController extends BaseController {
      * sceneNum             场景码
      */
     @PostMapping("/getScreencapVoice")
+    @VerifySign
     public Result getScreencapVoice(@RequestBody JSONObject param) throws Exception {
         String screencapMusic = param.get("screencapMusic") == null ? null : param.getString("screencapMusic");
         String originalFileName = param.get("originalFileName") == null ? null : param.getString("originalFileName");
@@ -62,6 +66,7 @@ public class AppSceneController extends BaseController {
      * 删除场景
      */
     @PostMapping("/deleteForCameraName")
+    @VerifySign
     public Result deleteForCameraName(@RequestBody JSONObject param){
         Long cameraId = param.get("cameraId") == null ? null : param.getLong("cameraId");
         String sceneNum = param.get("sceneNum") == null ? null : param.getString("sceneNum");

+ 4 - 0
src/main/java/com/fdkankan/ucenter/controller/app/AppUserController.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.controller.app;
 
 
 import com.alibaba.fastjson.JSONObject;
+import com.fdkankan.ucenter.annotation.VerifySign;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.service.IUserService;
 import com.fdkankan.ucenter.service.impl.AppService;
@@ -25,6 +26,7 @@ public class AppUserController {
      * cameraType   相机类型
      */
     @PostMapping("/getUserInfo")
+    @VerifySign
     public Result getUserInfo(@RequestBody JSONObject param){
         String phoneNum = param.get("phoneNum") == null ? null : param.getString("phoneNum");
         Integer cameraType = param.get("cameraType") == null ? 4 : param.getInteger("cameraType");
@@ -40,6 +42,7 @@ public class AppUserController {
      * nickName  昵称
      */
     @PostMapping("/updateNickName")
+    @VerifySign
     public Result updateNickName(@RequestBody JSONObject param){
         String phoneNum = param.get("phoneNum") == null ? null : param.getString("phoneNum");
         String nickName = param.get("nickName") == null ? null : param.getString("nickName");
@@ -52,6 +55,7 @@ public class AppUserController {
      * head      头像
      */
     @PostMapping("/uploadHead")
+    @VerifySign
     public Result uploadHead(@RequestBody JSONObject param) throws Exception {
         String phoneNum = param.get("phoneNum") == null ? null : param.getString("phoneNum");
         String head = param.get("head") == null ? null : param.getString("head");

+ 17 - 6
src/main/java/com/fdkankan/ucenter/controller/app/SceneApiController.java

@@ -13,7 +13,8 @@ import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.constant.RedisLockKey;
 import com.fdkankan.redis.util.RedisLockUtil;
-import com.fdkankan.ucenter.annotation.CheckInnerApiPermit;
+import com.fdkankan.sign.AesUtil;
+import com.fdkankan.ucenter.annotation.VerifySign;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.Result;
 import com.fdkankan.ucenter.common.constants.ConstantFilePath;
@@ -31,7 +32,6 @@ import com.fdkankan.ucenter.vo.response.LoginVo;
 import com.fdkankan.ucenter.vo.response.SceneInfoVo;
 import com.fdkankan.ucenter.vo.response.UserVo;
 import java.io.File;
-import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -39,7 +39,6 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
-import org.joda.time.DateTime;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -104,6 +103,7 @@ public class SceneApiController extends BaseController {
 
     //app 使用跳转到编辑页面
     @RequestMapping("/goEditScenePage")
+    @VerifySign
     public void goEditScenePage(HttpServletRequest request, HttpServletResponse response) throws Exception{
         String phoneNum = request.getParameter("phoneNum");
         String password = request.getParameter("password");
@@ -175,8 +175,13 @@ public class SceneApiController extends BaseController {
             }
 
         }
-
-        if(!SecurityUtil.MD5(password).equals(ssoUser.getPassword())) {
+        String passwordCode = null;
+        try {
+            passwordCode = SecurityUtil.MD5(AesUtil.desEncrypt(password));
+        } catch (Exception e) {
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3014, LoginConstant.FAILURE_MSG_3014);
+        }
+        if(!SecurityUtil.MD5(passwordCode).equals(ssoUser.getPassword())) {
             throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
         }
         sendResponse(ssoUser,webSite, request,response,sceneNum,lang,vlog, pad);
@@ -222,6 +227,7 @@ public class SceneApiController extends BaseController {
 
     //app调用 跳转到官网消费页面
     @RequestMapping("/goConsumptionPage")
+    @VerifySign
     public void goConsumptionPage(HttpServletRequest request, HttpServletResponse response) throws Exception{
         String phoneNum = request.getParameter("phoneNum");
         String password = request.getParameter("password");
@@ -248,6 +254,7 @@ public class SceneApiController extends BaseController {
      * 查找123看房未使用过的场景吗
      * */
     @PostMapping("/finSkSceneNum")
+    @VerifySign
     public Result finSkSceneNum(){
         String num = scene3dNumService.generateSceneNum(null);
         return Result.success(num);
@@ -257,6 +264,7 @@ public class SceneApiController extends BaseController {
      * 查找八目未使用过的场景吗*
      * */
     @PostMapping("/finSceneNum")
+    @VerifySign
     public Result finSceneNum(){
         String num = scene3dNumService.generateSceneNum(null);
         return Result.success(num);
@@ -390,6 +398,7 @@ public class SceneApiController extends BaseController {
      * 内部使用查询场景名称和场景码
      */
     @RequestMapping(value = "/getScenesBySnCode", method = RequestMethod.GET)
+    @VerifySign
     public Result getScenesBySnCode(String snCode) throws Exception{
         return sceneApiService.getScenesBySnCode(snCode,getToken());
     }
@@ -414,7 +423,7 @@ public class SceneApiController extends BaseController {
     /**
      * 增加场景下载次数
      */
-    @RequestMapping(value = "/addDownloadNum", method = RequestMethod.GET)
+    //@RequestMapping(value = "/addDownloadNum", method = RequestMethod.GET)
     public Result addDownloadNum(HttpServletRequest request) throws Exception{
         sceneApiService.addDownloadNum(request.getParameter("sceneNum"));
         return Result.success();
@@ -424,6 +433,7 @@ public class SceneApiController extends BaseController {
      * 获取编辑页面的资源下载路径
      */
     @RequestMapping(value = "/getEditDataUrl")
+    @VerifySign
     public Result getEditDataUrl(HttpServletRequest request) throws Exception{
         List<String> result = sceneApiService.getEditDataUrl(request.getParameter("num"));
         return Result.success(result);
@@ -433,6 +443,7 @@ public class SceneApiController extends BaseController {
      * 查询场景资源路径
      */
     @GetMapping("/querySceneDataSource")
+    @VerifySign
     public String querySceneDataSource(String num){
         return innerService.querySceneDataSource(num);
     }

+ 10 - 20
src/main/java/com/fdkankan/ucenter/controller/inner/InnerController.java

@@ -2,12 +2,10 @@ package com.fdkankan.ucenter.controller.inner;
 
 import com.fdkankan.common.constant.ErrorCode;
 import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.SecurityUtil;
 import com.fdkankan.sign.SignUtils;
-import com.fdkankan.ucenter.annotation.CheckInnerApiPermit;
+import com.fdkankan.ucenter.annotation.VerifySign;
 import com.fdkankan.ucenter.common.BaseController;
 import com.fdkankan.ucenter.common.Result;
-import com.fdkankan.ucenter.common.ResultData;
 import com.fdkankan.ucenter.common.constants.ResultCode;
 import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.entity.AppSecret;
@@ -16,20 +14,12 @@ import com.fdkankan.ucenter.service.IAppSecretService;
 import com.fdkankan.ucenter.service.IInnerService;
 import com.fdkankan.ucenter.service.IUserService;
 import com.fdkankan.ucenter.service.impl.LoginService;
-import com.fdkankan.ucenter.vo.request.CameraDetailParam;
-import com.fdkankan.ucenter.vo.request.CameraParam;
 import com.fdkankan.ucenter.vo.request.SceneParam;
-import com.fdkankan.ucenter.vo.response.CameraVo;
 import org.apache.commons.lang3.ObjectUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-
 /**
  * <p>
  * 内部接口控制器
@@ -54,8 +44,8 @@ public class InnerController extends BaseController {
     /**
      * 根据场景码获取token
      */
-    @CheckInnerApiPermit
     @GetMapping("/_token")
+    @VerifySign
     public Result createTokenByNum(String num){
         return innerService.createTokenByNum(num);
     }
@@ -63,8 +53,8 @@ public class InnerController extends BaseController {
     /**
      * 查询场景资源路径
      */
-    @CheckInnerApiPermit
     @GetMapping("/querySceneDataSource")
+    @VerifySign
     public String querySceneDataSource(String num){
         return innerService.querySceneDataSource(num);
     }
@@ -72,8 +62,8 @@ public class InnerController extends BaseController {
     /**
      * 查询场景资源路径
      */
-    @CheckInnerApiPermit
     @GetMapping("/querySceneNum")
+    @VerifySign
     public Result querySceneNum(String path){
         if(ObjectUtils.isEmpty(path)){
             return Result.failure("请输入路径");
@@ -84,8 +74,8 @@ public class InnerController extends BaseController {
     /**
      * 查询场景资源路径
      */
-    @CheckInnerApiPermit
     @GetMapping("/getAllSceneDbInfo")
+    @VerifySign
     public Result getAllSceneDbInfo(String num){
         if(ObjectUtils.isEmpty(num)){
             return Result.failure("请输入场景码");
@@ -96,8 +86,8 @@ public class InnerController extends BaseController {
     /**
      * 查询场景资源路径
      */
-    @CheckInnerApiPermit
     @GetMapping("/downloadCapture")
+    @VerifySign
     public Result downloadCapture(String num){
         if(ObjectUtils.isEmpty(num)){
             return Result.failure("请输入场景号");
@@ -108,6 +98,7 @@ public class InnerController extends BaseController {
      * 根据场景码获取场景码版本 深时使用
      */
     @GetMapping("/_getSceneNumVersion")
+    @VerifySign
     public Result getSceneNumVersion(@RequestParam(required = false) String num){
         if(StringUtils.isBlank(num)){
             throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
@@ -116,6 +107,7 @@ public class InnerController extends BaseController {
     }
 
     @GetMapping(value = "/getSnCode/{snCode}")
+    @VerifySign
     public Result getSnCode( @PathVariable String snCode) {
         if(StringUtils.isBlank(snCode)){
             throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);
@@ -124,11 +116,8 @@ public class InnerController extends BaseController {
     }
 
     @GetMapping("/getTokenByUserName/{userName}")
+    @VerifySign
     public Result getTokenByUserName(@PathVariable String userName){
-        Boolean flag = innerService.checkSign(getSign());
-        if(!flag){
-            throw new BusinessException(-1,"签名失败");
-        }
         User user = userService.getByUserName(userName);
         if(user == null){
             throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);
@@ -137,6 +126,7 @@ public class InnerController extends BaseController {
     }
 
     @PostMapping(value = "/getSceneBySnCode")
+    @VerifySign
     public Result getSceneSnCode( @RequestBody SceneParam param) {
         if(StringUtils.isBlank(param.getSnCode())){
             throw new BusinessException(ErrorCode.MISSING_REQUIRED_PARAMETERS);

+ 41 - 0
src/main/java/com/fdkankan/ucenter/httpClient/SignInterceptor.java

@@ -0,0 +1,41 @@
+package com.fdkankan.ucenter.httpClient;
+
+import com.alibaba.fastjson.JSONObject;
+import com.dtflys.forest.http.ForestRequest;
+import com.dtflys.forest.http.ForestResponse;
+import com.dtflys.forest.interceptor.Interceptor;
+import com.dtflys.forest.reflection.ForestMethod;
+import com.fdkankan.sign.RsaUtils;
+import com.fdkankan.ucenter.entity.AppSecret;
+import com.fdkankan.ucenter.service.IAppSecretService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.time.Instant;
+
+/**
+ * @author Xiewj
+ * @date 2025/7/8
+ */
+@Component
+@Slf4j
+public class SignInterceptor implements Interceptor<JSONObject> {
+
+    @Autowired
+    IAppSecretService appSecretService;
+
+    @Override
+    public void onInvokeMethod(ForestRequest request, ForestMethod method, Object[] args) {
+        AppSecret byAppId = appSecretService.getByAppId("411622fc06ccc29fde7693d9d8c20363");
+        JSONObject playload = new JSONObject();
+        Instant now = Instant.now();
+        long epochSecond = now.getEpochSecond();
+        playload.put("appId", byAppId.getAppId());
+        playload.put("timestamp", epochSecond);
+        request.addHeader("appId", byAppId.getAppId());
+        request.addHeader("sign", RsaUtils.encipher(playload.toJSONString(), byAppId.getPublicKey()));
+
+    }
+}

+ 2 - 1
src/main/java/com/fdkankan/ucenter/httpClient/client/FdKKClient.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.httpClient.client;
 
 import com.alibaba.fastjson.JSONObject;
 import com.dtflys.forest.annotation.*;
+import com.fdkankan.ucenter.httpClient.SignInterceptor;
 import com.fdkankan.ucenter.httpClient.address.FdkkAddressSource;
 import com.fdkankan.ucenter.httpClient.param.UploadEditSceneParam;
 
@@ -16,6 +17,6 @@ public interface FdKKClient {
 
 
 
-    @Post("/api/scene/file/reverseScene")
+    @Post(value = "/api/scene/file/reverseScene",interceptor = SignInterceptor.class)
     JSONObject reverseScene( @JSONBody UploadEditSceneParam param);
 }

+ 2 - 1
src/main/java/com/fdkankan/ucenter/httpClient/client/LaserClient.java

@@ -2,6 +2,7 @@ package com.fdkankan.ucenter.httpClient.client;
 
 import com.dtflys.forest.annotation.*;
 import com.fdkankan.ucenter.common.Result;
+import com.fdkankan.ucenter.httpClient.SignInterceptor;
 import com.fdkankan.ucenter.httpClient.address.LaserAddressSource;
 import com.fdkankan.ucenter.httpClient.param.SSDownSceneParam;
 import com.fdkankan.ucenter.httpClient.param.SsBindParam;
@@ -25,7 +26,7 @@ public interface LaserClient {
      * 获取相机场景数
      * @param param
      */
-    @Post("/laser/4dage/scene/getSceneNumByCamera")
+    @Post(value = "/laser/4dage/scene/getSceneNumByCamera",interceptor = SignInterceptor.class)
     Result getSceneNumByCamera(@JSONBody Map<String, String> param);
     /**
      * 取消相机协作

+ 0 - 48
src/main/java/com/fdkankan/ucenter/interceptor/CheckInnerApiPermitAspect.java

@@ -1,48 +0,0 @@
-package com.fdkankan.ucenter.interceptor;
-
-import cn.hutool.core.util.StrUtil;
-import com.fdkankan.common.constant.ErrorCode;
-import com.fdkankan.common.exception.BusinessException;
-import java.io.IOException;
-import javax.servlet.http.HttpServletRequest;
-import lombok.extern.log4j.Log4j2;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Before;
-import org.aspectj.lang.annotation.Pointcut;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-import org.springframework.web.context.request.RequestContextHolder;
-import org.springframework.web.context.request.ServletRequestAttributes;
-
-@Log4j2
-@Aspect
-@Component
-@Order(101)
-public class CheckInnerApiPermitAspect {
-
-	@Value("${inner.customToken}")
-	private String customToken;
-
-	@Pointcut("@annotation(com.fdkankan.ucenter.annotation.CheckInnerApiPermit)")
-	public void checkCooperationPermit() {
-	}
-
-	/**
-	 * 前置通知 用于判断用户协作场景是否有协作权限
-	 *
-	 * @param joinPoint
-	 *            切点
-	 * @throws IOException
-	 */
-	@Before("checkCooperationPermit()")
-	public void doBefore(JoinPoint joinPoint) throws Exception {
-		HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
-		String customToken = request.getHeader("custom-token");
-		if(StrUtil.isEmpty(customToken) || !customToken.equals(this.customToken)){
-			throw new BusinessException(ErrorCode.HAVE_NO_RIGHT);
-		}
-	}
-
-}

+ 0 - 1
src/main/java/com/fdkankan/ucenter/service/IInnerService.java

@@ -30,5 +30,4 @@ public interface IInnerService {
 
     Object getSceneBySnCode(SceneParam param);
 
-    Boolean checkSign(String sign);
 }

+ 7 - 1
src/main/java/com/fdkankan/ucenter/service/impl/AppService.java

@@ -9,6 +9,7 @@ import com.fdkankan.common.util.RandomUtil;
 import com.fdkankan.common.util.SecurityUtil;
 import com.fdkankan.redis.constant.RedisKey;
 import com.fdkankan.redis.util.RedisUtil;
+import com.fdkankan.sign.AesUtil;
 import com.fdkankan.ucenter.common.RedisKeyUtil;
 import com.fdkankan.ucenter.constant.LoginConstant;
 import com.fdkankan.ucenter.entity.Camera;
@@ -52,7 +53,12 @@ public class AppService {
         if (StringUtils.isEmpty(param.getPassword()) || StringUtils.isEmpty(param.getPhoneNum())){
             throw new BusinessException(LoginConstant.FAILURE_CODE_3001, LoginConstant.FAILURE_MSG_3001);
         }
-        String passwordCode = SecurityUtil.MD5(param.getPassword());
+        String passwordCode = null;
+        try {
+            passwordCode = SecurityUtil.MD5(AesUtil.desEncrypt(param.getPassword()));
+        } catch (Exception e) {
+            throw new BusinessException(LoginConstant.FAILURE_CODE_3014, LoginConstant.FAILURE_MSG_3014);
+        }
         User user = userService.getByUserName(param.getPhoneNum());
         if(user == null){
             throw new BusinessException(LoginConstant.FAILURE_CODE_3015, LoginConstant.FAILURE_MSG_3015);

+ 0 - 39
src/main/java/com/fdkankan/ucenter/service/impl/InnerServiceImpl.java

@@ -16,7 +16,6 @@ import com.fdkankan.ucenter.entity.*;
 import com.fdkankan.ucenter.service.*;
 import com.fdkankan.ucenter.vo.RelicsSceneInitQueueDTO;
 import com.fdkankan.ucenter.vo.request.SceneParam;
-import com.fdkankan.ucenter.util.RsaUtils;
 import com.fdkankan.ucenter.vo.response.LaserSceneInfoVo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ObjectUtils;
@@ -224,44 +223,6 @@ public class InnerServiceImpl implements IInnerService {
         return cameraDetailService.getByCameraId(camera.getId());
     }
 
-    @Override
-    public Boolean checkSign(String sign) {
-        try {
-            if(StringUtils.isBlank(sign)){
-                return false;
-            }
-            String deTxt = RsaUtils.decipher(sign, RsaUtils.privateKey);
-            if(StringUtils.isBlank(deTxt)){
-                return false;
-            }
-            JSONObject jsonObject = JSONObject.parseObject(deTxt);
-            String appId = jsonObject.getString("appId");
-            Long timestamp = jsonObject.getLong("timestamp");
-            if(StringUtils.isBlank(appId) || timestamp == null){
-                return false;
-            }
-            if(!appId.equals("ucenter")){
-                return false;
-            }
-            Long time = new Date().getTime();
-            if(time -timestamp >1000 * 30){
-                return false;
-            }
-            return true;
-        }catch (Exception e){
-            log.info("checkSign-error:{}",sign,e);
-            return false;
-        }
-
-    }
-
-    public static void main(String[] args) {
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("appId","ucenter");
-        jsonObject.put("timestamp",new Date().getTime());
-        System.out.println(RsaUtils.encipher(jsonObject.toJSONString(),"MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIhRmrAqPCFYYkqdYbk5WahD2H4cdNcTWdExA2X73gB+u3YPkoguau7Qa2en3lSJK2KXdYz1uztKrGgaNDY1AnsCAwEAAQ=="));
-    }
-
 
     @Override
     public Object getSceneBySnCode(SceneParam param) {

+ 13 - 7
src/main/java/com/fdkankan/ucenter/service/impl/LoginService.java

@@ -3,13 +3,10 @@ package com.fdkankan.ucenter.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.common.constant.ConstantRegex;
 import com.fdkankan.common.exception.BusinessException;
-import com.fdkankan.common.util.Base64Converter;
-import com.fdkankan.common.util.FileUtils;
-import com.fdkankan.common.util.JwtUtil;
-import com.fdkankan.common.util.NumberUtils;
-import com.fdkankan.common.util.SecurityUtil;
+import com.fdkankan.common.util.*;
 import com.fdkankan.fyun.face.FYunFileServiceInterface;
 import com.fdkankan.image.MatrixToImageWriterUtil;
+import com.fdkankan.sign.AesUtil;
 import com.fdkankan.sms.SmsService;
 import com.fdkankan.ucenter.common.MailUtil;
 import com.fdkankan.ucenter.common.constants.ConstantFilePath;
@@ -82,7 +79,12 @@ public class LoginService {
         }
         String password ;
         if(StringUtils.isNotBlank(param.getClear()) && param.getClear().equals("YES")){
-             password = param.getPassword();
+            try {
+                String desEncrypt = AesUtil.desEncrypt(param.getPassword());
+                password = desEncrypt;
+            }catch (Exception e){
+                throw new BusinessException(LoginConstant.FAILURE_CODE_3014, LoginConstant.FAILURE_MSG_3014);
+            }
         }else {
             password = Base64Converter.decode(Base64Converter.subText(param.getPassword()));
         }
@@ -165,7 +167,11 @@ public class LoginService {
         }
         String password ;
         if(StringUtils.isNotBlank(param.getClear()) && param.getClear().equals("YES")){
-            password = param.getPassword();
+            try {
+                password = SecurityUtil.MD5(AesUtil.desEncrypt(param.getPassword()));
+            } catch (Exception e) {
+                throw new BusinessException(LoginConstant.FAILURE_CODE_3014, LoginConstant.FAILURE_MSG_3014);
+            }
         }else {
             password = Base64Converter.decode(Base64Converter.subText(param.getPassword()));
         }

ファイルの差分が大きいため隠しています
+ 0 - 314
src/main/java/com/fdkankan/ucenter/util/RsaUtils.java