From e16302f9d475c7cc4dd18c5abf1a23cb5502e362 Mon Sep 17 00:00:00 2001
From: whyclxw <810412026@qq.com>
Date: 星期三, 28 五月 2025 14:57:56 +0800
Subject: [PATCH] 密码验证加-

---
 src/main/java/com/whyc/controller/FaceController.java |  196 +++++++++++++++++++++++++++++++++---------------
 1 files changed, 135 insertions(+), 61 deletions(-)

diff --git a/src/main/java/com/whyc/controller/FaceController.java b/src/main/java/com/whyc/controller/FaceController.java
index 67502ad..0a99257 100644
--- a/src/main/java/com/whyc/controller/FaceController.java
+++ b/src/main/java/com/whyc/controller/FaceController.java
@@ -3,32 +3,33 @@
 import com.arcsoft.face.FaceEngine;
 import com.arcsoft.face.toolkit.ImageFactory;
 import com.arcsoft.face.toolkit.ImageInfo;
-import com.google.gson.reflect.TypeToken;
+import com.whyc.constant.UserOperation;
 import com.whyc.constant.YamlProperties;
 import com.whyc.dto.Response;
 import com.whyc.factory.FaceEngineFactory;
 import com.whyc.pojo.PermitGroup;
-import com.whyc.pojo.UserFace;
 import com.whyc.pojo.UserInf;
-import com.whyc.service.FaceService;
-import com.whyc.service.PermitGroupUserService;
-import com.whyc.service.UserService;
+import com.whyc.service.*;
 import com.whyc.util.ActionUtil;
+import com.whyc.util.CommonUtil;
 import com.whyc.util.FaceIdentifyUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.assertj.core.util.Arrays;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.system.ApplicationHome;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 import sun.misc.BASE64Decoder;
 
 import javax.annotation.Resource;
+import javax.servlet.ServletContext;
 import javax.servlet.http.HttpServletRequest;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
-import java.util.HashMap;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import static com.whyc.util.ActionUtil.getApplication;
 
@@ -37,7 +38,7 @@
  */
 @RequestMapping("face")
 @RestController
-@Api(tags = "浜鸿劯璇嗗埆")
+@Api(tags = "鐢ㄦ埛绠$悊-浜鸿劯璇嗗埆")
 public class FaceController {
 
     @Resource
@@ -49,12 +50,28 @@
     @Resource
     private UserService userService;
 
+    @Resource
+    private MapOutlineService mapOutlineService;
+
+    @Autowired
+    private BaoJiGroupUserService baoJiGroupUserService;
+
     @GetMapping("activeOnline")
     @ApiOperation(value = "鍦ㄧ嚎婵�娲讳汉鑴歌瘑鍒紩鎿�",notes = "鍙渶瑕佸垰寮�濮嬫椂璋冪敤涓�娆�,浼氬鑷碼ppId涓庣‖浠惰澶囩粦瀹�,蹇呴』鏈夊閮ㄧ綉缁�,鍚﹀垯婵�娲讳細澶辫触!" +
             "鍚庣画浣跨敤鏃犻渶鍐嶈皟鐢ㄦ縺娲�,鍙互绂荤嚎浣跨敤")
     public Response activeOnline(){
-        Response model = new Response();
-        boolean b = FaceIdentifyUtil.activeOnline();
+        boolean b = FaceIdentifyUtil.active(1);
+        if(b){
+            return new Response().set(1,true,"寮曟搸婵�娲绘垚鍔�");
+        }else{
+            return new Response().set(1,false,"寮曟搸婵�娲诲け璐�,璇锋鏌ョ綉缁滄槸鍚︿负澶栫綉骞剁‘璁ppId鍜宬ey鏄惁姝g‘!");
+        }
+    }
+
+    @GetMapping("activeOffline")
+    @ApiOperation(value = "绂荤嚎婵�娲讳汉鑴歌瘑鍒紩鎿�,澧炲�肩増浣跨敤")
+    public Response activeOffline(){
+        boolean b = FaceIdentifyUtil.active(2);
         if(b){
             return new Response().set(1,true,"寮曟搸婵�娲绘垚鍔�");
         }else{
@@ -64,7 +81,12 @@
 
     @PostMapping
     @ApiOperation(value = "娣诲姞",notes = "娣诲姞鍒颁汉鑴稿簱")
-    public Response add(@RequestParam String fileData,String uName,Integer uId ){
+    public Response add(@RequestBody Map<String,Object> paramMap ){
+        String fileData = (String) paramMap.get("fileData");
+        String uName  = (String) paramMap.get("uName");
+        //杩囨护 uName鐨勭壒娈婂瓧绗�,閬垮厤璺緞閬嶅巻鏀诲嚮
+        uName = ActionUtil.filterFileName(uName);
+        Integer uId  = Integer.parseInt((String)paramMap.get("uId"));
         //浼犲弬 uId,uName,fileData--鏂囦欢娴�
         fileData = fileData.replaceAll(" ", "+");
 
@@ -98,16 +120,16 @@
             Response checkRes1 = FaceIdentifyUtil.orientAndPxDetect(faceEngine,imageInfo);
             if((boolean)checkRes1.getData()){
                 /*=========鍥剧墖淇濆瓨===========*/
-                //鑾峰彇鍒皌omcat webapp缁濆璺緞
-                String realPath = getApplication().getRealPath("/");
-//                String[] split = realPath.split(File.separator);
-                String[] split = realPath.split("\\\\");
-                String projectName = split[split.length - 1];
-
-                String webAppPath = realPath.substring(0, realPath.lastIndexOf(projectName));
+                ApplicationHome applicationHome = new ApplicationHome(getClass());
+                File jarFile = applicationHome.getDir();
 
                 //瀛樺偍浜鸿劯鍥剧墖鐨勬枃浠跺す
-                String fileDirName = webAppPath + projectName + "_photo";
+                String fileDirName;
+                if(YamlProperties.runModel == 1) {
+                    fileDirName = jarFile.getParentFile().toString() + File.separator + "fg_photo";
+                }else{
+                    fileDirName = jarFile.toString() + File.separator + "fg_photo";
+                }
 
                 File file = new File(fileDirName);
                 //涓嶅瓨鍦ㄥ垯鍒涘缓璇ユ枃浠跺す
@@ -117,16 +139,22 @@
 
                 //鏂囦欢鍏ㄨ矾寰�
                 String fileName = fileDirName + File.separator + uName + ".jpg";
-
+                FileOutputStream fot=null;
                 try {
-                    FileOutputStream fot = new FileOutputStream(fileName);
-
+                    fot = new FileOutputStream(fileName);
                     fot.write(dataBytes);
                     fot.flush();
-                    fot.close();
 
                 } catch (IOException e) {
                     e.printStackTrace();
+                }finally {
+                    if(fot!=null){
+                        try {
+                            fot.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
                 }
 
                 /*=========鏁版嵁搴撹〃鏇存柊===========*/
@@ -144,11 +172,13 @@
      * 浜鸿劯搴撶鐞�: 鏇存柊
      * @return
      */
-    @PutMapping
+    @PostMapping("update")
     @ApiOperation(value = "鏇存柊")
-    public Response update(@RequestParam String fileData,String uName){
+    public Response update(@RequestBody String fileData,@RequestParam String uName){
         //浼犲弬,uName,fileData--鏂囦欢娴�
 
+        //杩囨护 uName鐨勭壒娈婂瓧绗�,閬垮厤璺緞閬嶅巻鏀诲嚮
+        uName = ActionUtil.filterFileName(uName);
         //鐢变簬鍥剧墖瀛楃涓叉槸鐢眀ase64缂栫爜鐨�,瑙g爜鎴愬瓧鑺傛暟缁�
         fileData = fileData.replaceAll(" ", "+");
         fileData = fileData.split(",")[1];
@@ -174,15 +204,16 @@
             Response checkRes1 = FaceIdentifyUtil.orientAndPxDetect(faceEngine, imageInfo);
             if ((boolean)checkRes1.getData()) {
                 /*=========鍥剧墖淇濆瓨===========*/
-                //鑾峰彇鍒皌omcat webapp缁濆璺緞
-                String realPath = getApplication().getRealPath("/");
-                String[] split = realPath.split(File.separator);
-                String projectName = split[split.length - 1];
-
-                String webAppPath = realPath.substring(0, realPath.lastIndexOf(projectName));
+                ApplicationHome applicationHome = new ApplicationHome(getClass());
+                File jarFile = applicationHome.getDir();
 
                 //瀛樺偍浜鸿劯鍥剧墖鐨勬枃浠跺す
-                String fileDirName = webAppPath + projectName + "_photo";
+                String fileDirName;
+                if(YamlProperties.runModel == 1) {
+                    fileDirName = jarFile.getParentFile().toString() + File.separator + "fg_photo";
+                }else{
+                    fileDirName = jarFile.toString() + File.separator + "fg_photo";
+                }
 
                 File file = new File(fileDirName);
                 //涓嶅瓨鍦ㄥ垯鍒涘缓璇ユ枃浠跺す
@@ -192,16 +223,21 @@
 
                 //鏂囦欢鍏ㄨ矾寰�
                 String fileName = fileDirName + File.separator + uName + ".jpg";
-
+                FileOutputStream fot =null;
                 try {
-                    FileOutputStream fot = new FileOutputStream(fileName);
-
+                    fot = new FileOutputStream(fileName);
                     fot.write(dataBytes);
                     fot.flush();
-                    fot.close();
-
                 } catch (IOException e) {
                     e.printStackTrace();
+                }finally {
+                    if(fot!=null){
+                        try {
+                            fot.close();
+                        } catch (IOException e) {
+                            e.printStackTrace();
+                        }
+                    }
                 }
                 return new Response().setII(1,"鏇存柊鎴愬姛");
             }
@@ -213,18 +249,20 @@
      * 浜鸿劯搴撶鐞�: 鍒犻櫎
      * @return
      */
-    @DeleteMapping
+    @PostMapping("delete")
     @ApiOperation(value = "鍒犻櫎")
     @Transactional
     public Response delete(@RequestParam Integer uId,@RequestParam Integer faceId,
-                         @RequestParam String uName){
+                         @RequestParam String uName,HttpServletRequest request){
 
+        //杩囨护 uName鐨勭壒娈婂瓧绗�,閬垮厤璺緞閬嶅巻鏀诲嚮
+        uName = ActionUtil.filterFileName(uName);
         //鏇存柊user_inf鍜宖ace琛�
         service.update(uId,faceId);
 
         //鍒犻櫎鍥剧墖
         //鑾峰彇鍒板浘鐗囨墍鍦ㄦ枃浠跺す鐨勫叏璺緞
-        String fileName = findFileDirPath();
+        String fileName = findFileDirPath(request);
         //鑾峰彇鍥剧墖鐨勫叏璺緞
         File file = new File(fileName+File.separator+uName+".jpg");
         if(file.exists()){
@@ -234,18 +272,13 @@
         return new Response().setII(1,"鍒犻櫎鎴愬姛");
     }
 
-    /**鑾峰彇鍥剧墖鏂囦欢澶瑰叏璺緞*/
-    private String findFileDirPath() {
-        String realPath = getApplication().getRealPath("/");
-        String[] split = realPath.split("\\\\");
-        String projectName = split[split.length - 1];
-
-        String webAppPath = realPath.substring(0, realPath.lastIndexOf(projectName));
-
-        //瀛樺偍浜鸿劯鍥剧墖鐨勬枃浠跺す
-        String fileDirName = webAppPath + "\\" + projectName + "_photo";
-
-        return fileDirName;
+    /**鑾峰彇鍥剧墖鏂囦欢澶瑰叏璺緞
+     * @param request*/
+    private String findFileDirPath(HttpServletRequest request) {
+        ApplicationHome applicationHome = new ApplicationHome(getClass());
+        File jarFile = applicationHome.getDir();
+        //鍦╦ar鍖呮墍鍦ㄧ洰褰曚笅鐢熸垚涓�涓猽pload鏂囦欢澶圭敤鏉ュ瓨鍌ㄤ笂浼犵殑鍥剧墖
+        return jarFile.getParentFile().toString()+File.separator+"fg_photo";
     }
 
     /**鑾峰彇鍥剧墖鐨刪ttp鍔犺浇url*/
@@ -253,7 +286,8 @@
         HttpServletRequest request = ActionUtil.getRequest();
         //鑾峰彇椤圭洰鍚嶇О
         String realPath = ActionUtil.getApplication().getRealPath("/");
-        String[] split = realPath.split("/");
+        //String[] split = realPath.split("/");
+        String[] split = realPath.split(File.separator);
         String projectName = split[split.length - 1];
         //鍥剧墖淇濆瓨璺緞,閲囧彇ip+port璁块棶褰㈠紡鑰岄潪纭洏褰㈠紡,鏂逛究鍥剧墖鍔犺浇
         String url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+"/"+projectName+"_photo/"+uName+".jpg";
@@ -267,9 +301,9 @@
      */
     @GetMapping("info")
     @ApiOperation(value = "鏌ヨ浜鸿劯淇℃伅")
-    public Response getInfo(){
+    public Response getInfo(HttpServletRequest request){
         //浼犲叆pageNum,pageSize
-        UserInf userInf = (UserInf) ActionUtil.getSession().getAttribute("user");
+        UserInf userInf = (UserInf) request.getSession().getAttribute("user");
         UserInf user = service.getInfo(userInf.getUId());
 
         return new Response().set(1,user);
@@ -280,8 +314,14 @@
      */
     @PostMapping("faceCompare2N")
     @ApiOperation(value = "浜鸿劯璇嗗埆瀵规瘮")
-    public Response faceCompare2N(@RequestParam String fileData){
+    public Response faceCompare2N(@RequestBody String fileData,@RequestParam String uKeyId,HttpServletRequest request){
         Response res = new Response();
+        //鍏堥獙璇乽KeyId瀵瑰簲鐨勭敤鎴�
+        UserInf userByUKeyId = userService.getUserByUKeyId(uKeyId);
+        if (userByUKeyId == null){
+            return res.set(1,false,"Ukey娌℃湁缁戝畾鐢ㄦ埛");
+        }
+
         /*====鑾峰彇鍥剧墖骞舵牎楠屾椿浣�,瑙掑害,鍍忕礌澶у皬====*/
         //鐢变簬鍥剧墖瀛楃涓叉槸鐢眀ase64缂栫爜鐨�,瑙g爜鎴愬瓧鑺傛暟缁�
         fileData = fileData.replaceAll(" ", "+");
@@ -301,20 +341,40 @@
             if (res.getCode() == 1) {
                 res = FaceIdentifyUtil.orientAndPxDetect(faceEngine, imageInfo);
                 //浜哄儚瑙掑害,澶у皬鏍¢獙閫氳繃
-                if(res.getCode()==1) {
+                if((boolean) res.getData()) {
+                    //閲嶇疆鏍囪瘑
+                    res.setData(null);
+                    res.setMsg(null);
                     //鑾峰彇鏁版嵁搴撲腑鎵�鏈夌殑浜鸿劯鍥剧墖
                     List<UserInf> userInfList = service.findAllFaceUrl();
                     if(userInfList.size()==0){
                         res.setCode(0);
                         res.setMsg("浜鸿劯搴撴殏鏃犱换浣曟暟鎹�");
                     }else{
+                        boolean urlExist = false;
                         for (UserInf temp:userInfList){
                             String filePath = temp.getFace().getUrl();
-                            ImageInfo imageInfo2 = ImageFactory.getRGBData(new File(filePath));
-                            Response res3 = FaceIdentifyUtil.faceCompare(faceEngine, imageInfo, imageInfo2);
+                            File file = new File(filePath);
+                            //涓嶅瓨鍦ㄥ垯涓嶇户缁墽琛�
+                            if(!file.exists()){
+                                continue;
+                            }else{
+                                urlExist = true;
+                            }
+                            ImageInfo imageInfo2 = ImageFactory.getRGBData(file);
+                            res = FaceIdentifyUtil.faceCompare(faceEngine, imageInfo, imageInfo2);
                             //瀵规瘮鎴愬姛,璁板綍鐢ㄦ埛鐧诲綍淇℃伅
-                            if(res3.getCode()==1){
+                            if((boolean) res.getData()){
+                                //Ukey瀵瑰簲鐢ㄦ埛鍜屼汉鑴稿搴旂敤鎴烽獙璇�
+                                if(!temp.getUId().equals(userByUKeyId.getUId())){
+                                    return res.set(1,false,"UKey瀵瑰簲鐢ㄦ埛鍜屽綋鍓嶄汉鑴稿搴旂敤鎴蜂笉鍖归厤");
+                                }
+                                List<Object> dataList = new ArrayList<>();
+                                dataList.add(temp);
+
                                 // 灏嗙櫥闄嗘垚鍔熺殑鐢ㄦ埛瀛樺叆session
+                                ServletContext servletContext = request.getServletContext();
+                                servletContext.setAttribute(temp.getUName(), request.getSession().getId());
                                 ActionUtil.getSession().setAttribute("user", temp);
 
                                 //璁剧疆session涓嶆椿鍔ㄦ椂闂翠负30鍒�
@@ -322,15 +382,29 @@
                                 ActionUtil.getSession().setAttribute("ip", ActionUtil.getRequest().getRemoteAddr());
                                 List<PermitGroup> permitList = permitGroupUserService.getPermitByUser(temp.getUId());
                                 if (permitList!=null && permitList.size()!=0) {
+                                    dataList.add(permitList.get(0).getPermitGroupId());
                                     ActionUtil.getSession().setAttribute("permits", permitList);
                                 } else {
-                                    res.setCode(0);
+                                    res.setCode(1);
+                                    res.setData(false);
                                     res.setMsg("杩樻湭鍒嗛厤鏉冮檺");
                                 }
+
+                                //鏌ヨ鐢ㄦ埛瀵瑰簲鐨勭彮缁勬爣璇�
+                                dataList.add(baoJiGroupUserService.getGroupFlag(temp.getUId().intValue()));
+                                //鏌ヨ婵�娲荤殑鍦板浘
+                                String mapName = mapOutlineService.selectMapName();
+                                dataList.add(mapName);
+                                CommonUtil.record(temp.getUId(), UserOperation.TYPE_LOGIN.getType(), UserOperation.TYPE_LOGIN.getTypeName(), UserOperation.TYPE_LOGIN.getTypeNameEn());
+                                res.setData2(dataList);
+
                                 //灏嗘柊鐧诲綍鐨勭敤鎴峰瓨鍏pplication
                                 userService.setApplication(temp);
                             }
                         }
+                        if(!urlExist){
+                            res.set(1,false,"ukey瀵瑰簲鐨勪汉鑴稿簱璺緞涓嶅瓨鍦�");
+                        }
                     }
                 }
             }

--
Gitblit v1.9.1