From 296b67944a807fb918d78b50a2d89768ec4aca38 Mon Sep 17 00:00:00 2001 From: zhaowenxuan <chacca165@163.com> Date: 星期五, 18 七月 2025 14:33:46 +0800 Subject: [PATCH] 接口加解密 --- ltkj-admin/src/main/java/com/ltkj/web/controller/api/config/DecryptFilterConfig.java | 22 ++ ltkj-admin/src/main/java/com/ltkj/web/controller/api/utils/CryptoUtil.java | 36 ++++ ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java | 344 +++++++++++++++++++++++++++++-------- ltkj-admin/src/main/java/com/ltkj/web/controller/api/anno/Encrypt.java | 16 + ltkj-admin/src/main/java/com/ltkj/web/controller/api/filter/DecryptFilter.java | 36 ++++ ltkj-admin/src/main/java/com/ltkj/web/controller/api/wrapper/DecryptRequestWrapper.java | 33 +++ ltkj-admin/src/main/java/com/ltkj/web/controller/api/advice/EncryptResponseAdvice.java | 38 ++++ 7 files changed, 445 insertions(+), 80 deletions(-) diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java index 6018389..f0a20b5 100644 --- a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/DefaultController.java @@ -9,17 +9,16 @@ import com.itextpdf.text.Paragraph; import com.ltkj.common.core.domain.AjaxResult; import com.ltkj.framework.config.MatchUtils; +import com.ltkj.hosp.domain.DictHosp; import com.ltkj.hosp.domain.TjCustomer; import com.ltkj.hosp.domain.TjOrder; import com.ltkj.hosp.domain.TjOrderYcxm; import com.ltkj.hosp.mapper.TjCustomerMapper; -import com.ltkj.hosp.service.ITjCustomerService; -import com.ltkj.hosp.service.ITjOrderDetailService; -import com.ltkj.hosp.service.ITjOrderService; -import com.ltkj.hosp.service.TjOrderYcxmService; +import com.ltkj.hosp.service.*; import com.ltkj.hosp.vodomain.ShenGaoTiZhongVo; import com.ltkj.system.service.ISysConfigService; import com.ltkj.web.config.pdfutils.PdfUtils; +import com.ltkj.web.controller.api.anno.Encrypt; import com.ltkj.web.controller.system.TjCheckController; import com.ltkj.web.controller.system.TjReportController; import io.swagger.annotations.ApiOperation; @@ -27,7 +26,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.IOException; @@ -53,8 +51,6 @@ private TjCheckController tjCheckController; @Autowired private TjCustomerMapper tjCustomerMapper; - @Resource - private ITjCustomerService customerService; @Autowired private ITjOrderService tjOrderService; @Autowired @@ -63,6 +59,37 @@ private ISysConfigService sysConfigService; @Autowired private TjOrderYcxmService tjOrderYcxmService; + @Autowired + private IDictHospService dictHospService; + @Autowired + private ITjCustomerService customerService; + + /**************************************** 鎻愪緵缁橦IS璋冪敤 *************************************************/ + + /** + * 瀵逛簬HIS鎻愪緵 + * 鏍规嵁韬唤璇佸彿鏌ヨ杩斿洖浣撴璁板綍锛氬寘鍚鍚嶃�佽韩浠借瘉鍙枫�佹�у埆銆佸嚭鐢熸棩鏈熴�佸勾榫勩�佷綋妫�鍙枫�佽仈绯荤數璇濓紝浣撴鏃ユ湡锛屾姤鍛婄姸鎬� + * @param json + * @return + */ + @PostMapping("/getInfo") + public AjaxResult getInfo(@RequestBody String json){ + JSONObject entries = JSONUtil.parseObj(json); + String card = entries.getStr("card"); +// TjCustomer customer = tjCustomerMapper.getCusInfo(card); + String key = sysConfigService.selectConfigByKey("h5OrXcxQueryDate"); + if (StrUtil.isBlank(key)){ + key = "2025-05-01"; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date date = sdf.parse(key); + List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoList(card,date); + return AjaxResult.success(customer); + } catch (ParseException e) { + return AjaxResult.error(); + } + } /** * 鎻愪緵缁欎笁鏂硅皟鐢ㄧ殑鎶ュ憡鏌ョ湅鎺ュ彛 @@ -81,23 +108,6 @@ return; } tjReportController.preview(response,true,tjNum); - } - - @PostMapping("/viewReportUrl") - public AjaxResult viewReportUrl(@RequestBody String json){ - JSONObject entries = JSONUtil.parseObj(json); - String tjNum = entries.getStr("tjNum"); - LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(TjOrder::getHeshouStatus,1); - wrapper.eq(TjOrder::getTjNumber,tjNum); - List<TjOrder> list = tjOrderService.list(wrapper); - if (list.isEmpty()){ - return AjaxResult.error("鎶ュ憡鏈牳鏀�,璇锋牳鏀跺悗鏌ョ湅"); - } - TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNum); - TjCustomer tjCustomer = tjCustomerMapper.selectById( tjOrder.getUserId()); - String filePath = tjCustomer.getCusId() + tjNum + tjCustomer.getCusName() + "_鎶ュ憡.pdf"; - return AjaxResult.success(filePath); } /** @@ -215,29 +225,17 @@ return JSONUtil.toBean(entries, AjaxResult.class); } + /**************************************** 鑷敤鎺ュ彛 鏈夊姞瑙e瘑 ******************************************/ + /** - * 瀵逛簬HIS鎻愪緵 - * 鏍规嵁韬唤璇佸彿鏌ヨ杩斿洖浣撴璁板綍锛氬寘鍚鍚嶃�佽韩浠借瘉鍙枫�佹�у埆銆佸嚭鐢熸棩鏈熴�佸勾榫勩�佷綋妫�鍙枫�佽仈绯荤數璇濓紝浣撴鏃ユ湡锛屾姤鍛婄姸鎬� - * @param json - * @return + * 灏忕▼搴忔煡璇㈠垎闄㈠尯淇℃伅鍒楄〃 */ - @PostMapping("/getInfo") - public AjaxResult getInfo(@RequestBody String json){ - JSONObject entries = JSONUtil.parseObj(json); - String card = entries.getStr("card"); -// TjCustomer customer = tjCustomerMapper.getCusInfo(card); - String key = sysConfigService.selectConfigByKey("h5OrXcxQueryDate"); - if (StrUtil.isBlank(key)){ - key = "2025-05-01"; - } - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); - try { - Date date = sdf.parse(key); - List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoList(card,date); - return AjaxResult.success(customer); - } catch (ParseException e) { - return AjaxResult.error(); - } + @Encrypt + @PostMapping("/getHospList") + @ApiOperation(value = "灏忕▼搴忔煡璇㈠垎闄㈠尯淇℃伅鍒楄〃") + public AjaxResult getHospList() { + List<DictHosp> list = dictHospService.list(); + return AjaxResult.success(list); } /** @@ -246,6 +244,7 @@ * @param json * @return */ + @Encrypt @PostMapping("/getCusInfo") public AjaxResult getInfoCus(@RequestBody String json){ JSONObject entries = JSONUtil.parseObj(json); @@ -260,8 +259,226 @@ if (customer == null) return AjaxResult.error(); name = customer.getCusName(); } - List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoListByCardAndName(card,name); - return AjaxResult.success(customer); + String key = sysConfigService.selectConfigByKey("h5OrXcxQueryDate"); + if (StrUtil.isBlank(key)){ + key = "2025-05-01"; + } + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + try { + Date date = sdf.parse(key); + List<Map<String ,Object>> customer = tjCustomerMapper.getCusInfoListByCardAndName(card,name,date); + return AjaxResult.success(customer); + } catch (ParseException e) { + return AjaxResult.error(); + } + } + + /** + * 鎻愪緵缁欎笁鏂硅皟鐢ㄧ殑鎶ュ憡鏌ョ湅鎺ュ彛 + * @param response + * @param json + */ + @Encrypt + @PostMapping("/cusViewReport") + public void cusViewReport(HttpServletResponse response, @RequestBody String json) throws IOException { + JSONObject entries = JSONUtil.parseObj(json); + String tjNum = entries.getStr("tjNum"); + LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TjOrder::getHeshouStatus,1); + wrapper.eq(TjOrder::getTjNumber,tjNum); + List<TjOrder> list = tjOrderService.list(wrapper); + if (list.isEmpty()){ + return; + } + tjReportController.preview(response,true,tjNum); + } + + /** + * 鎻愪緵缁欎笁鏂硅皟鐢ㄧ殑鎶ュ憡鏁版嵁鎺ュ彛 + * @param json + * @return + */ + @Encrypt + @PostMapping("/cusReportData") + public AjaxResult cusReportData(@RequestBody String json){ + String tjNum = JSONUtil.parseObj(json).getStr("tjNum"); + LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>(); +// wrapper.eq(TjOrder::getHeshouStatus,1); + wrapper.eq(TjOrder::getTjNumber,tjNum); + List<TjOrder> list = tjOrderService.list(wrapper); + if (list.isEmpty()){ + return AjaxResult.error("鏆傛棤鏁版嵁锛侊紒"); + } + JSONObject entries = JSONUtil.parseObj(tjCheckController.updateCheckType(tjNum)); + + LambdaQueryWrapper<TjOrderYcxm> wq = new LambdaQueryWrapper<>(); + wq.eq(TjOrderYcxm::getTjh, tjNum); + List<TjOrderYcxm> ycxms = tjOrderYcxmService.list(wq); + Map<String, List<TjOrderYcxm>> stringListMap = ycxms.stream().collect(Collectors.groupingBy(TjOrderYcxm::getParentName)); + int xmXh = 1; + JSONArray jczs = JSONUtil.createArray(); + for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) { + List<TjOrderYcxm> details = entry.getValue(); + String xmmc = entry.getKey(); + boolean isXmWrite = false; + int index = 1; + JSONObject object = JSONUtil.createObj(); + for (TjOrderYcxm detail : details) { + if (!isXmWrite) { + object.putOpt("xh",xmXh); + object.putOpt("xmmc",xmmc); + xmXh++; + } + String result = detail.getJcjg(); + if (StrUtil.isNotBlank(result)) { + result = result.replaceAll("鏈姤鍛婁粎瀵规湰娆℃鏌ヨ礋璐o紝涓村簥鍖荤敓渚濇嵁鐥呮儏濡傛湁鐤戦棶锛岃鍙婃椂澶嶆煡鎴栬繘涓�姝ユ鏌�", ""); + StringBuilder builder = new StringBuilder(); + if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue; + builder.append(" (").append(index).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n"); + index++; + result = builder.toString(); + } + object.putOpt("result",result); + } + jczs.add(object); + } + entries.putOpt("jczs",jczs); + + xmXh = 1; + JSONArray ysjy = JSONUtil.createArray(); + for (Map.Entry<String, List<TjOrderYcxm>> entry : stringListMap.entrySet()) { + List<TjOrderYcxm> details = entry.getValue(); + if(null !=details && !details.isEmpty()){ + details= details.stream() + .sorted(Comparator.comparing(TjOrderYcxm::getJcxm)) + .collect(Collectors.toList()); + boolean isXmWrite = false; + int index1 = 1; + for (TjOrderYcxm detail : details) { + JSONObject obj = JSONUtil.createObj(); + String xmmc = entry.getKey().toString(); + if (!isXmWrite) { + isXmWrite = true; + obj.putOpt("xh",xmXh); + obj.putOpt("xmmc",xmmc); + xmXh++; + } + String result = detail.getJcjg(); + if (StrUtil.isNotBlank(result)) { + StringBuilder builder = new StringBuilder(); + if (StrUtil.isBlank(result.replaceAll("\n", "").trim())) continue; + builder.append(" (").append(index1).append(")").append(detail.getJcxm()).append(": ").append(result).append("\n"); + index1++; + result = builder.toString(); + } + if (StrUtil.isNotBlank(result)) { + obj.putOpt("result",result); + } else { + obj.putOpt("result","寤鸿瀹氭湡澶嶆煡"); + } + String str = " "; + List<Map<String, Object>> maps = new ArrayList<>(); + + String jynr = detail.getJynr(); + JSONArray array = JSONUtil.parseArray(jynr); + for (Object object : array) { + Map<String,Object> objectMap=new HashMap<>(); + JSONObject jsonObject = (JSONObject) object; + String bt = jsonObject.getStr("bt"); + String nr = jsonObject.getStr("nr"); + objectMap.put("bt",bt); + objectMap.put("nr",nr); + if(null !=bt || null !=nr) maps.add(objectMap); + } + ArrayList<String> strings = new ArrayList<>(); + List<Map<String, Object>> collect1 = maps.stream().distinct().collect(Collectors.toList()); + for (Map<String, Object> objectMap : collect1) { + String content = str + objectMap.get("bt").toString() + objectMap.get("nr").toString(); + if (StrUtil.isBlank(content)) content = " "; + strings.add(content); + } + obj.putOpt("contents",strings); + ysjy.add(obj); + } + } + } + + entries.putOpt("ysjy",ysjy); + + removeNullFields(entries); + return JSONUtil.toBean(entries, AjaxResult.class); + } + + @Encrypt + @PostMapping("/viewReportUrl") + public AjaxResult viewReportUrl(@RequestBody String json){ + JSONObject entries = JSONUtil.parseObj(json); + String tjNum = entries.getStr("tjNum"); + LambdaQueryWrapper<TjOrder> wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(TjOrder::getHeshouStatus,1); + wrapper.eq(TjOrder::getTjNumber,tjNum); + List<TjOrder> list = tjOrderService.list(wrapper); + if (list.isEmpty()){ + return AjaxResult.error("鎶ュ憡鏈牳鏀�,璇锋牳鏀跺悗鏌ョ湅"); + } + TjOrder tjOrder = tjOrderService.getOrderByTjNum(tjNum); + TjCustomer tjCustomer = tjCustomerMapper.selectById( tjOrder.getUserId()); + String filePath = tjCustomer.getCusId() + tjNum + tjCustomer.getCusName() + "_鎶ュ憡.pdf"; + return AjaxResult.success(filePath); + } + + /** + * 灏忕▼搴忕偣鍑讳綋妫�鎶ュ憡鏌ヨ璇︽儏,鏄剧ず韬珮浣撻噸浣撻噸鎸囨暟鏀剁缉鍘嬭垝寮犲帇 + */ + @Encrypt + @GetMapping("/getShenGaoTiZhong") + @ApiOperation(value = "灏忕▼搴�-浣撴鎶ュ憡鏌ヨ璇︽儏") + public AjaxResult getShenGaoTiZhong(@RequestParam @ApiParam(value = "浣撴鍙�") String tjNumber) { +// Map<String, Object> objectMap = new HashMap<>(); + LambdaQueryWrapper<TjOrder> wq1 = new LambdaQueryWrapper<>(); + wq1.eq(TjOrder::getTjNumber, tjNumber); + wq1.eq(TjOrder::getCheckStatus, 1); + TjOrder one = tjOrderService.getOne(wq1); + if (one == null) { + return AjaxResult.success("浣撴鏆傛湭瀹屾垚锛侊紒"); + } + + List<ShenGaoTiZhongVo> maps = detailService.getShenGaoTiZhongList(one.getTjNumber()); + + log.info("ltkj {}鐨勪綋妫�鎶ュ憡鏌ヨ璇︽儏"+maps,tjNumber); + return AjaxResult.success(maps); + + } + + /** + * 灏忕▼搴忕偣鍑讳綋妫�鎶ュ憡鏌ヨ璇︽儏,鏄剧ず韬珮浣撻噸浣撻噸鎸囨暟鏀剁缉鍘嬭垝寮犲帇 + */ + @Encrypt + @GetMapping("/updatePhone") + @ApiOperation(value = "灏忕▼搴�-淇敼鎵嬫満鍙锋帴鍙�") + public AjaxResult updatePhone(@RequestParam @ApiParam(value = "韬唤璇佸彿") String sfzh, + @RequestParam @ApiParam(value = "濮撳悕") String name, + @RequestParam @ApiParam(value = "鎵嬫満鍙�") String phone) { + if(StrUtil.isBlank(sfzh) || StrUtil.isBlank(name) || StrUtil.isBlank(phone)){ + return AjaxResult.error("璇疯緭鍏ユ纭殑淇℃伅!"); + } + if(!MatchUtils.isIdCard(sfzh)){ + return AjaxResult.error("韬唤璇佸彿鏍煎紡閿欒 璇锋牳瀵瑰悗閲嶆柊杈撳叆!"); + } + LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>(); + wq.eq(TjCustomer::getCusIdcard, sfzh); + wq.like(TjCustomer::getCusName, name); + TjCustomer customer = customerService.getOne(wq); + if(null != customer){ + if(!MatchUtils.isMobileNO( phone)){ + return AjaxResult.error("鎵嬫満鍙蜂笉姝g‘ 璇锋牳瀵瑰悗閲嶆柊杈撳叆!"); + } + customer.setCusPhone( phone); + customerService.updateById(customer); + return AjaxResult.success("淇敼鎴愬姛!"); + } + return AjaxResult.error("鏈煡璇㈠埌璇ヤ汉鍛�!"); + } public static void removeNullFields(JSONObject jsonObject) { @@ -299,37 +516,4 @@ jsonObject.remove(key); } } - - - - /** - * 灏忕▼搴忕偣鍑讳綋妫�鎶ュ憡鏌ヨ璇︽儏,鏄剧ず韬珮浣撻噸浣撻噸鎸囨暟鏀剁缉鍘嬭垝寮犲帇 - */ - @GetMapping("/updatePhone") - @ApiOperation(value = "灏忕▼搴�-淇敼鎵嬫満鍙锋帴鍙�") - public AjaxResult updatePhone(@RequestParam @ApiParam(value = "韬唤璇佸彿") String sfzh, - @RequestParam @ApiParam(value = "濮撳悕") String name, - @RequestParam @ApiParam(value = "鎵嬫満鍙�") String phone) { - if(StrUtil.isBlank(sfzh) || StrUtil.isBlank(name) || StrUtil.isBlank(phone)){ - return AjaxResult.error("璇疯緭鍏ユ纭殑淇℃伅!"); - } - if(!MatchUtils.isIdCard(sfzh)){ - return AjaxResult.error("韬唤璇佸彿鏍煎紡閿欒 璇锋牳瀵瑰悗閲嶆柊杈撳叆!"); - } - LambdaQueryWrapper<TjCustomer> wq = new LambdaQueryWrapper<>(); - wq.eq(TjCustomer::getCusIdcard, sfzh); - wq.like(TjCustomer::getCusName, name); - TjCustomer customer = customerService.getOne(wq); - if(null != customer){ - if(!MatchUtils.isMobileNO( phone)){ - return AjaxResult.error("鎵嬫満鍙蜂笉姝g‘ 璇锋牳瀵瑰悗閲嶆柊杈撳叆!"); - } - customer.setCusPhone( phone); - customerService.updateById(customer); - return AjaxResult.success("淇敼鎴愬姛!"); - } - return AjaxResult.error("鏈煡璇㈠埌璇ヤ汉鍛�!"); - - } - } diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/advice/EncryptResponseAdvice.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/advice/EncryptResponseAdvice.java new file mode 100644 index 0000000..c5243d4 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/advice/EncryptResponseAdvice.java @@ -0,0 +1,38 @@ +package com.ltkj.web.controller.api.advice; + +import com.ltkj.web.controller.api.anno.Encrypt; +import com.ltkj.web.controller.api.utils.CryptoUtil; +import org.springframework.core.MethodParameter; +import org.springframework.http.MediaType; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.http.server.ServerHttpRequest; +import org.springframework.http.server.ServerHttpResponse; +import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice; + +@RestControllerAdvice +public class EncryptResponseAdvice implements ResponseBodyAdvice<Object> { + + @Override + public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) { + return returnType.hasMethodAnnotation(Encrypt.class) + || returnType.getContainingClass().isAnnotationPresent(Encrypt.class); + } + + @Override + public Object beforeBodyWrite(Object body, + MethodParameter returnType, + MediaType selectedContentType, + Class<? extends HttpMessageConverter<?>> selectedConverterType, + ServerHttpRequest request, + ServerHttpResponse response) { + + try { + String json = body instanceof String ? (String) body : new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsString(body); + System.out.println("鍔犲瘑鍓嶏細" + json); + return CryptoUtil.encrypt(json); + } catch (Exception e) { + throw new RuntimeException("鍝嶅簲鍔犲瘑澶辫触", e); + } + } +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/anno/Encrypt.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/anno/Encrypt.java new file mode 100644 index 0000000..a649712 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/anno/Encrypt.java @@ -0,0 +1,16 @@ +package com.ltkj.web.controller.api.anno; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +/** + * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃 + * @Author: zhaowenxuan + * @Date: 2025/7/17 17:31 + */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface Encrypt { +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/config/DecryptFilterConfig.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/config/DecryptFilterConfig.java new file mode 100644 index 0000000..bc6fa83 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/config/DecryptFilterConfig.java @@ -0,0 +1,22 @@ +package com.ltkj.web.controller.api.config; + +import com.ltkj.web.controller.api.filter.DecryptFilter; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * @Company: 瑗垮畨璺嘲绉戞妧鏈夐檺鍏徃 + * @Author: zhaowenxuan + * @Date: 2025/7/17 17:27 + */ +@Configuration +public class DecryptFilterConfig { + @Bean + public FilterRegistrationBean<DecryptFilter> decryptFilter() { + FilterRegistrationBean<DecryptFilter> registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new DecryptFilter()); + registrationBean.addUrlPatterns("/api/cusViewReport", "/api/cusReportData", "/api/getCusInfo","/api/getHospList","/api/updatePhone"); + return registrationBean; + } +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/filter/DecryptFilter.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/filter/DecryptFilter.java new file mode 100644 index 0000000..1a3b0c8 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/filter/DecryptFilter.java @@ -0,0 +1,36 @@ +package com.ltkj.web.controller.api.filter; + +import com.ltkj.web.controller.api.utils.CryptoUtil; +import com.ltkj.web.controller.api.wrapper.DecryptRequestWrapper; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.annotation.WebFilter; +import javax.servlet.http.HttpServletRequest; +import java.io.BufferedReader; +import java.io.IOException; +import java.util.stream.Collectors; + +//@Component +//@WebFilter(urlPatterns = {"/api/cusViewReport", "/api/cusReportData", "/api/getCusInfo"}) +public class DecryptFilter implements Filter { + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + HttpServletRequest httpRequest = (HttpServletRequest) request; + + String body = new BufferedReader(httpRequest.getReader()).lines() + .collect(Collectors.joining(System.lineSeparator())); + System.out.println("璇锋眰鏁版嵁锛�"+body); + try { + String decryptedBody = CryptoUtil.decrypt(body); + System.out.println("瑙e瘑鍚庯細"+decryptedBody); + DecryptRequestWrapper wrappedRequest = new DecryptRequestWrapper(httpRequest, decryptedBody); + chain.doFilter(wrappedRequest, response); + } catch (Exception e) { + throw new ServletException("璇锋眰浣撹В瀵嗗け璐�", e); + } + } +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/utils/CryptoUtil.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/utils/CryptoUtil.java new file mode 100644 index 0000000..44ab2b2 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/utils/CryptoUtil.java @@ -0,0 +1,36 @@ +package com.ltkj.web.controller.api.utils; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.util.Base64; + +public class CryptoUtil { + + private static final String KEY = "f$9Lz#Q@1vT!eW2%"; // AES瀵嗛挜锛�16浣嶏級 + private static final String ALGORITHM = "AES"; + + // 鍔犲瘑 + public static String encrypt(String plainText) throws Exception { + SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM); + Cipher cipher = Cipher.getInstance(ALGORITHM); + cipher.init(Cipher.ENCRYPT_MODE, keySpec); + byte[] encrypted = cipher.doFinal(plainText.getBytes()); + return Base64.getEncoder().encodeToString(encrypted); + } + + // 瑙e瘑 + public static String decrypt(String cipherText) throws Exception { + SecretKeySpec keySpec = new SecretKeySpec(KEY.getBytes(), ALGORITHM); + Cipher cipher = Cipher.getInstance(ALGORITHM); + cipher.init(Cipher.DECRYPT_MODE, keySpec); + byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(cipherText)); + return new String(decrypted); + } + + public static void main(String[] args) throws Exception { + String encrypt = encrypt("{\"card\": \"622722197210102079\",\"name\":\"鐒︽媺姘慭"}"); + System.out.println("encrypt = " + encrypt); + String decrypt = decrypt(encrypt); + System.out.println("decrypt = " + decrypt); + } +} diff --git a/ltkj-admin/src/main/java/com/ltkj/web/controller/api/wrapper/DecryptRequestWrapper.java b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/wrapper/DecryptRequestWrapper.java new file mode 100644 index 0000000..a5c91a1 --- /dev/null +++ b/ltkj-admin/src/main/java/com/ltkj/web/controller/api/wrapper/DecryptRequestWrapper.java @@ -0,0 +1,33 @@ +package com.ltkj.web.controller.api.wrapper; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletRequestWrapper; +import java.io.*; + +public class DecryptRequestWrapper extends HttpServletRequestWrapper { + + private final byte[] body; + + public DecryptRequestWrapper(HttpServletRequest request, String decryptedBody) { + super(request); + this.body = decryptedBody.getBytes(); + } + + @Override + public ServletInputStream getInputStream() { + ByteArrayInputStream bais = new ByteArrayInputStream(body); + return new ServletInputStream() { + @Override public boolean isFinished() { return bais.available() == 0; } + @Override public boolean isReady() { return true; } + @Override public void setReadListener(ReadListener readListener) {} + @Override public int read() { return bais.read(); } + }; + } + + @Override + public BufferedReader getReader() { + return new BufferedReader(new InputStreamReader(getInputStream())); + } +} -- Gitblit v1.8.0