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