“xubinhui 3 anni fa
parent
commit
0232e78e5f

+ 23 - 23
src/main/java/cn/licoy/encryptbody/advice/DecryptRequestBodyAdvice.java

@@ -68,11 +68,11 @@ public class DecryptRequestBodyAdvice implements RequestBodyAdvice {
             }
         }
         if (Arrays.stream(ReflectUtil.getSuperclasses(methodParameter.getDeclaringClass()))
-                .flatMap(clazz -> Arrays.stream(clazz.getAnnotations()))
-                .anyMatch(annotation -> annotation instanceof DecryptBody ||
-                        annotation instanceof AESDecryptBody ||
-                        annotation instanceof DESDecryptBody ||
-                        annotation instanceof RSADecryptBody)) {
+                  .flatMap(clazz -> Arrays.stream(clazz.getAnnotations()))
+                  .anyMatch(annotation -> annotation instanceof DecryptBody ||
+                          annotation instanceof AESDecryptBody ||
+                          annotation instanceof DESDecryptBody ||
+                          annotation instanceof RSADecryptBody)) {
             return true;
         }
         return methodParameter.getMethod() != null &&
@@ -148,21 +148,21 @@ public class DecryptRequestBodyAdvice implements RequestBodyAdvice {
         if (methodParameter.getMethod().isAnnotationPresent(DecryptBody.class)) {
             DecryptBody decryptBody = methodParameter.getMethodAnnotation(DecryptBody.class);
             return DecryptAnnotationInfoBean.builder()
-                    .decryptBodyMethod(decryptBody.value())
-                    .key(decryptBody.otherKey())
-                    .build();
+                                            .decryptBodyMethod(decryptBody.value())
+                                            .key(decryptBody.otherKey())
+                                            .build();
         }
         if (methodParameter.getMethod().isAnnotationPresent(DESDecryptBody.class)) {
             return DecryptAnnotationInfoBean.builder()
-                    .decryptBodyMethod(DecryptBodyMethod.DES)
-                    .key(methodParameter.getMethodAnnotation(DESDecryptBody.class).otherKey())
-                    .build();
+                                            .decryptBodyMethod(DecryptBodyMethod.DES)
+                                            .key(methodParameter.getMethodAnnotation(DESDecryptBody.class).otherKey())
+                                            .build();
         }
         if (methodParameter.getMethod().isAnnotationPresent(AESDecryptBody.class)) {
             return DecryptAnnotationInfoBean.builder()
-                    .decryptBodyMethod(DecryptBodyMethod.AES)
-                    .key(methodParameter.getMethodAnnotation(AESDecryptBody.class).otherKey())
-                    .build();
+                                            .decryptBodyMethod(DecryptBodyMethod.AES)
+                                            .key(methodParameter.getMethodAnnotation(AESDecryptBody.class).otherKey())
+                                            .build();
         }
         return null;
     }
@@ -180,21 +180,21 @@ public class DecryptRequestBodyAdvice implements RequestBodyAdvice {
             if (annotation instanceof DecryptBody) {
                 DecryptBody decryptBody = (DecryptBody) annotation;
                 return DecryptAnnotationInfoBean.builder()
-                        .decryptBodyMethod(decryptBody.value())
-                        .key(decryptBody.otherKey())
-                        .build();
+                                                .decryptBodyMethod(decryptBody.value())
+                                                .key(decryptBody.otherKey())
+                                                .build();
             }
             if (annotation instanceof DESDecryptBody) {
                 return DecryptAnnotationInfoBean.builder()
-                        .decryptBodyMethod(DecryptBodyMethod.DES)
-                        .key(((DESDecryptBody) annotation).otherKey())
-                        .build();
+                                                .decryptBodyMethod(DecryptBodyMethod.DES)
+                                                .key(((DESDecryptBody) annotation).otherKey())
+                                                .build();
             }
             if (annotation instanceof AESDecryptBody) {
                 return DecryptAnnotationInfoBean.builder()
-                        .decryptBodyMethod(DecryptBodyMethod.AES)
-                        .key(((AESDecryptBody) annotation).otherKey())
-                        .build();
+                                                .decryptBodyMethod(DecryptBodyMethod.AES)
+                                                .key(((AESDecryptBody) annotation).otherKey())
+                                                .build();
             }
         }
         return null;

+ 37 - 37
src/main/java/cn/licoy/encryptbody/advice/EncryptResponseBodyAdvice.java

@@ -77,13 +77,13 @@ public class EncryptResponseBodyAdvice implements ResponseBodyAdvice {
             }
         }
         if (Arrays.stream(ReflectUtil.getSuperclasses(returnType.getDeclaringClass()))
-                .flatMap(clazz -> Arrays.stream(clazz.getAnnotations()))
-                .anyMatch(annotation -> annotation instanceof EncryptBody ||
-                        annotation instanceof AESEncryptBody ||
-                        annotation instanceof DESEncryptBody ||
-                        annotation instanceof RSAEncryptBody ||
-                        annotation instanceof MD5EncryptBody ||
-                        annotation instanceof SHAEncryptBody)) {
+                  .flatMap(clazz -> Arrays.stream(clazz.getAnnotations()))
+                  .anyMatch(annotation -> annotation instanceof EncryptBody ||
+                          annotation instanceof AESEncryptBody ||
+                          annotation instanceof DESEncryptBody ||
+                          annotation instanceof RSAEncryptBody ||
+                          annotation instanceof MD5EncryptBody ||
+                          annotation instanceof SHAEncryptBody)) {
             return true;
         }
         return returnType.getMethod().isAnnotationPresent(EncryptBody.class) ||
@@ -127,33 +127,33 @@ public class EncryptResponseBodyAdvice implements ResponseBodyAdvice {
         if (methodParameter.getMethod().isAnnotationPresent(EncryptBody.class)) {
             EncryptBody encryptBody = methodParameter.getMethodAnnotation(EncryptBody.class);
             return EncryptAnnotationInfoBean.builder()
-                    .encryptBodyMethod(encryptBody.value())
-                    .key(encryptBody.otherKey())
-                    .shaEncryptType(encryptBody.shaType())
-                    .build();
+                                            .encryptBodyMethod(encryptBody.value())
+                                            .key(encryptBody.otherKey())
+                                            .shaEncryptType(encryptBody.shaType())
+                                            .build();
         }
         if (methodParameter.getMethod().isAnnotationPresent(MD5EncryptBody.class)) {
             return EncryptAnnotationInfoBean.builder()
-                    .encryptBodyMethod(EncryptBodyMethod.MD5)
-                    .build();
+                                            .encryptBodyMethod(EncryptBodyMethod.MD5)
+                                            .build();
         }
         if (methodParameter.getMethod().isAnnotationPresent(SHAEncryptBody.class)) {
             return EncryptAnnotationInfoBean.builder()
-                    .encryptBodyMethod(EncryptBodyMethod.SHA)
-                    .shaEncryptType(methodParameter.getMethodAnnotation(SHAEncryptBody.class).value())
-                    .build();
+                                            .encryptBodyMethod(EncryptBodyMethod.SHA)
+                                            .shaEncryptType(methodParameter.getMethodAnnotation(SHAEncryptBody.class).value())
+                                            .build();
         }
         if (methodParameter.getMethod().isAnnotationPresent(DESEncryptBody.class)) {
             return EncryptAnnotationInfoBean.builder()
-                    .encryptBodyMethod(EncryptBodyMethod.DES)
-                    .key(methodParameter.getMethodAnnotation(DESEncryptBody.class).otherKey())
-                    .build();
+                                            .encryptBodyMethod(EncryptBodyMethod.DES)
+                                            .key(methodParameter.getMethodAnnotation(DESEncryptBody.class).otherKey())
+                                            .build();
         }
         if (methodParameter.getMethod().isAnnotationPresent(AESEncryptBody.class)) {
             return EncryptAnnotationInfoBean.builder()
-                    .encryptBodyMethod(EncryptBodyMethod.AES)
-                    .key(methodParameter.getMethodAnnotation(AESEncryptBody.class).otherKey())
-                    .build();
+                                            .encryptBodyMethod(EncryptBodyMethod.AES)
+                                            .key(methodParameter.getMethodAnnotation(AESEncryptBody.class).otherKey())
+                                            .build();
         }
         return null;
     }
@@ -171,33 +171,33 @@ public class EncryptResponseBodyAdvice implements ResponseBodyAdvice {
             if (annotation instanceof EncryptBody) {
                 EncryptBody encryptBody = (EncryptBody) annotation;
                 return EncryptAnnotationInfoBean.builder()
-                        .encryptBodyMethod(encryptBody.value())
-                        .key(encryptBody.otherKey())
-                        .shaEncryptType(encryptBody.shaType())
-                        .build();
+                                                .encryptBodyMethod(encryptBody.value())
+                                                .key(encryptBody.otherKey())
+                                                .shaEncryptType(encryptBody.shaType())
+                                                .build();
             }
             if (annotation instanceof MD5EncryptBody) {
                 return EncryptAnnotationInfoBean.builder()
-                        .encryptBodyMethod(EncryptBodyMethod.MD5)
-                        .build();
+                                                .encryptBodyMethod(EncryptBodyMethod.MD5)
+                                                .build();
             }
             if (annotation instanceof SHAEncryptBody) {
                 return EncryptAnnotationInfoBean.builder()
-                        .encryptBodyMethod(EncryptBodyMethod.SHA)
-                        .shaEncryptType(((SHAEncryptBody) annotation).value())
-                        .build();
+                                                .encryptBodyMethod(EncryptBodyMethod.SHA)
+                                                .shaEncryptType(((SHAEncryptBody) annotation).value())
+                                                .build();
             }
             if (annotation instanceof DESEncryptBody) {
                 return EncryptAnnotationInfoBean.builder()
-                        .encryptBodyMethod(EncryptBodyMethod.DES)
-                        .key(((DESEncryptBody) annotation).otherKey())
-                        .build();
+                                                .encryptBodyMethod(EncryptBodyMethod.DES)
+                                                .key(((DESEncryptBody) annotation).otherKey())
+                                                .build();
             }
             if (annotation instanceof AESEncryptBody) {
                 return EncryptAnnotationInfoBean.builder()
-                        .encryptBodyMethod(EncryptBodyMethod.AES)
-                        .key(((AESEncryptBody) annotation).otherKey())
-                        .build();
+                                                .encryptBodyMethod(EncryptBodyMethod.AES)
+                                                .key(((AESEncryptBody) annotation).otherKey())
+                                                .build();
             }
         }
         return null;

+ 8 - 11
src/main/java/cn/licoy/encryptbody/util/AESEncryptUtil.java

@@ -2,9 +2,6 @@ package cn.licoy.encryptbody.util;
 
 import javax.crypto.*;
 import javax.crypto.spec.SecretKeySpec;
-import java.io.UnsupportedEncodingException;
-import java.security.InvalidKeyException;
-import java.security.NoSuchAlgorithmException;
 import java.security.SecureRandom;
 
 /**
@@ -14,36 +11,36 @@ import java.security.SecureRandom;
  * @version 2018/9/5
  */
 public class AESEncryptUtil {
+    private final static String password = "2181E9E80460B852859EE455AC5203D9";
 
     /**
      * AES加密
      *
+     * @param formatStringBody
      * @param content  字符串内容
-     * @param password 密钥
      */
-    public static String encrypt(String content, String password) throws Exception {
-        return aes(content, password, Cipher.ENCRYPT_MODE);
+    public static String encrypt(String formatStringBody, String content) throws Exception {
+        return aes(content, Cipher.ENCRYPT_MODE);
     }
 
 
     /**
      * AES解密
      *
+     * @param value
      * @param content  字符串内容
-     * @param password 密钥
      */
-    public static String decrypt(String content, String password) throws Exception {
-        return aes(content, password, Cipher.DECRYPT_MODE);
+    public static String decrypt(String value, String content) throws Exception {
+        return aes(content, Cipher.DECRYPT_MODE);
     }
 
     /**
      * AES加密/解密 公共方法
      *
      * @param content  字符串
-     * @param password 密钥
      * @param type     加密:{@link Cipher#ENCRYPT_MODE},解密:{@link Cipher#DECRYPT_MODE}
      */
-    private static String aes(String content, String password, int type) throws Exception {
+    private static String aes(String content, int type) throws Exception {
         KeyGenerator generator = KeyGenerator.getInstance("AES");
         SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
         random.setSeed(password.getBytes());

+ 12 - 0
src/main/java/com/izouma/jmrh/config/DecryptFilter.java

@@ -12,6 +12,7 @@ import org.springframework.stereotype.Component;
 import javax.servlet.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletRequestWrapper;
+import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
 import java.util.Map;
 
@@ -39,6 +40,17 @@ public class DecryptFilter implements Filter {
         }
     }
 
+//    @Override
+//    public void doFilter(HttpServletRequest servletRequest, HttpServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
+//        String contentType = ((HttpServletRequest) servletRequest).getHeader("content-type");
+//        String encrypted = ((HttpServletRequest) servletRequest).getHeader("content-encrypted");
+//        if ("true".equals(encrypted) && !"application/json".equals(contentType)) {
+//            filterChain.doFilter(new EncryptedRequest(servletRequest, config), servletResponse);
+//        } else {
+//            filterChain.doFilter(servletRequest, servletResponse);
+//        }
+//    }
+
     @Override
     public void destroy() {
         Filter.super.destroy();

+ 5 - 2
src/main/java/com/izouma/jmrh/dto/ResSnDAndPropertyDTO.java

@@ -14,10 +14,13 @@ import java.util.List;
 @JsonIgnoreProperties(value = {"hibernateLazyInitializer"}, ignoreUnknown = true)
 public class ResSnDAndPropertyDTO {
 
-    @ApiModelProperty("资源供需")
-    private ResourceSupplyAndDemand resSnD;
 
     @ApiModelProperty("资源供需属性")
     private List<ResSnDProperty> propertyList;
 
+    @ApiModelProperty("资源供需")
+    private ResourceSupplyAndDemand resSnD;
+
+
+
 }

+ 13 - 16
src/main/java/com/izouma/jmrh/security/JwtAuthorizationTokenFilter.java

@@ -46,14 +46,14 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
             try {
                 username = jwtTokenUtil.getUsernameFromToken(authToken);
             } catch (IllegalArgumentException e) {
-                log.error("an error occurred during getting username from token", e);
+                log.error("an error occurred during getting username from token");
             } catch (ExpiredJwtException e) {
-                log.warn("the token is expired and not valid anymore", e);
+                log.warn("the token is expired and not valid anymore");
             } catch (SignatureException e) {
                 log.error(e.getMessage());
             }
         } else {
-            log.warn("couldn't find bearer string, will ignore the header");
+            // log.warn("couldn't find bearer string, will ignore the header");
         }
 
         log.debug("checking authentication for user '{}'", username);
@@ -61,24 +61,21 @@ public class JwtAuthorizationTokenFilter extends OncePerRequestFilter {
             log.debug("security context was null, so authorizing user");
 
             // It is not compelling necessary to load the use details from the database. You could also store the information
-            // in the token and read it from it. It's up to you ;)            
+            // in the token and read it from it. It's up to you ;)
             UserDetails userDetails;
             try {
                 userDetails = userDetailsService.loadUserByUsername(username);
+
+                // For simple validation it is completely sufficient to just check the token integrity. You don't have to call
+                // the database compellingly. Again it's up to you ;)
+                if (jwtTokenUtil.validateToken(authToken, userDetails)) {
+                    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
+                    authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
+                    SecurityContextHolder.getContext().setAuthentication(authentication);
+                }
             } catch (Exception e) {
                 //response.sendError(HttpServletResponse.SC_UNAUTHORIZED, e.getMessage());
-                chain.doFilter(request, response);
-                return;
-            }
-
-
-            // For simple validation it is completely sufficient to just check the token integrity. You don't have to call
-            // the database compellingly. Again it's up to you ;)
-            if (jwtTokenUtil.validateToken(authToken, userDetails)) {
-                UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
-                authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
-                log.info("authorized user '{}', setting security context", username);
-                SecurityContextHolder.getContext().setAuthentication(authentication);
+                log.error(e.getMessage());
             }
         }
 

+ 3 - 2
src/main/java/com/izouma/jmrh/web/ResourceSupplyAndDemandController.java

@@ -40,8 +40,9 @@ public class ResourceSupplyAndDemandController extends BaseController {
     //@PreAuthorize("hasRole('ADMIN')")
     @PostMapping("/save")
     @OperLog(value = "供需管理-编辑", type = "编辑")
-    public ResSnDAndPropertyDTO save(@RequestBody ResSnDAndPropertyDTO record) {
-        return resourceSupplyAndDemandService.save(record);
+    public ResSnDAndPropertyDTO save(@ModelAttribute ResSnDAndPropertyDTO record) {
+        ResSnDAndPropertyDTO save = resourceSupplyAndDemandService.save(record);
+        return save;
     }
 
     //@PreAuthorize("hasRole('ADMIN')")

+ 140 - 119
src/main/vue/package-lock.json

@@ -1966,6 +1966,16 @@
           "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
           "dev": true
         },
+        "ansi-styles": {
+          "version": "4.3.0",
+          "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-convert": "^2.0.1"
+          }
+        },
         "cacache": {
           "version": "13.0.1",
           "resolved": "https://registry.npmjs.org/cacache/-/cacache-13.0.1.tgz",
@@ -1992,6 +2002,60 @@
             "unique-filename": "^1.1.1"
           }
         },
+        "chalk": {
+          "version": "4.1.2",
+          "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "ansi-styles": "^4.1.0",
+            "supports-color": "^7.1.0"
+          }
+        },
+        "color-convert": {
+          "version": "2.0.1",
+          "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "color-name": "~1.1.4"
+          }
+        },
+        "color-name": {
+          "version": "1.1.4",
+          "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+          "dev": true,
+          "optional": true
+        },
+        "emojis-list": {
+          "version": "3.0.0",
+          "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz",
+          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+          "dev": true,
+          "optional": true
+        },
+        "has-flag": {
+          "version": "4.0.0",
+          "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+          "dev": true,
+          "optional": true
+        },
+        "loader-utils": {
+          "version": "2.0.4",
+          "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+          "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "big.js": "^5.2.2",
+            "emojis-list": "^3.0.0",
+            "json5": "^2.1.2"
+          }
+        },
         "minimist": {
           "version": "1.2.5",
           "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
@@ -2014,6 +2078,16 @@
             "minipass": "^3.1.1"
           }
         },
+        "supports-color": {
+          "version": "7.2.0",
+          "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "has-flag": "^4.0.0"
+          }
+        },
         "terser-webpack-plugin": {
           "version": "2.3.8",
           "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz",
@@ -2030,6 +2104,18 @@
             "terser": "^4.6.12",
             "webpack-sources": "^1.4.3"
           }
+        },
+        "vue-loader-v16": {
+          "version": "npm:vue-loader@16.8.3",
+          "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+          "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+          "dev": true,
+          "optional": true,
+          "requires": {
+            "chalk": "^4.1.0",
+            "hash-sum": "^2.0.0",
+            "loader-utils": "^2.0.0"
+          }
         }
       }
     },
@@ -2109,6 +2195,7 @@
       "version": "3.1.2",
       "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.1.2.tgz",
       "integrity": "sha512-QLq9z8m79mCinpaEeSURhnNCN6djxpHw0lpP/bodMlt5kALfONpryMthvnrQOlTcIKoF+VoPi+lPHUYeDFPXug==",
+      "dev": true,
       "requires": {
         "consolidate": "^0.15.1",
         "hash-sum": "^1.0.2",
@@ -2124,12 +2211,14 @@
         "hash-sum": {
           "version": "1.0.2",
           "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz",
-          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ="
+          "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
+          "dev": true
         },
         "lru-cache": {
           "version": "4.1.5",
           "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
           "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+          "dev": true,
           "requires": {
             "pseudomap": "^1.0.2",
             "yallist": "^2.1.2"
@@ -2138,12 +2227,14 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
         },
         "yallist": {
           "version": "2.1.2",
           "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
-          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
+          "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+          "dev": true
         }
       }
     },
@@ -2477,6 +2568,7 @@
       "version": "3.2.1",
       "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
       "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+      "dev": true,
       "requires": {
         "color-convert": "^1.9.0"
       }
@@ -2970,7 +3062,8 @@
     "bluebird": {
       "version": "3.7.2",
       "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
-      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg=="
+      "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==",
+      "dev": true
     },
     "bn.js": {
       "version": "5.1.3",
@@ -3398,6 +3491,7 @@
       "version": "2.4.2",
       "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
       "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+      "dev": true,
       "requires": {
         "ansi-styles": "^3.2.1",
         "escape-string-regexp": "^1.0.5",
@@ -3411,34 +3505,27 @@
       "dev": true
     },
     "chart.js": {
-      "version": "2.8.0",
-      "resolved": "https://registry.npm.taobao.org/chart.js/download/chart.js-2.8.0.tgz",
-      "integrity": "sha1-twOxDQ9OxQeerv3NbKMtyPgm4Ok=",
+      "version": "2.9.4",
+      "resolved": "https://registry.npmmirror.com/chart.js/-/chart.js-2.9.4.tgz",
+      "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==",
       "requires": {
         "chartjs-color": "^2.1.0",
         "moment": "^2.10.2"
       }
     },
     "chartjs-color": {
-      "version": "2.3.0",
-      "resolved": "https://registry.npm.taobao.org/chartjs-color/download/chartjs-color-2.3.0.tgz",
-      "integrity": "sha1-Dn4ejbo36uhBX9PbOL9XIAfdlY8=",
+      "version": "2.4.1",
+      "resolved": "https://registry.npmmirror.com/chartjs-color/-/chartjs-color-2.4.1.tgz",
+      "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==",
       "requires": {
         "chartjs-color-string": "^0.6.0",
-        "color-convert": "^0.5.3"
-      },
-      "dependencies": {
-        "color-convert": {
-          "version": "0.5.3",
-          "resolved": "https://registry.npm.taobao.org/color-convert/download/color-convert-0.5.3.tgz",
-          "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0="
-        }
+        "color-convert": "^1.9.3"
       }
     },
     "chartjs-color-string": {
       "version": "0.6.0",
-      "resolved": "https://registry.npm.taobao.org/chartjs-color-string/download/chartjs-color-string-0.6.0.tgz",
-      "integrity": "sha1-HfCWYhwOcHIKZPQTXqFx0FFAL3E=",
+      "resolved": "https://registry.npmmirror.com/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz",
+      "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==",
       "requires": {
         "color-name": "^1.0.0"
       }
@@ -3946,6 +4033,7 @@
       "version": "0.15.1",
       "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz",
       "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==",
+      "dev": true,
       "requires": {
         "bluebird": "^3.1.1"
       }
@@ -4303,6 +4391,11 @@
         "randomfill": "^1.0.3"
       }
     },
+    "crypto-js": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.1.1.tgz",
+      "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw=="
+    },
     "css-color-names": {
       "version": "0.0.4",
       "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz",
@@ -4399,7 +4492,8 @@
     "cssesc": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
-      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
+      "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
+      "dev": true
     },
     "cssnano": {
       "version": "4.1.10",
@@ -5225,7 +5319,8 @@
     "escape-string-regexp": {
       "version": "1.0.5",
       "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
-      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
+      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+      "dev": true
     },
     "eslint": {
       "version": "7.19.0",
@@ -6368,7 +6463,8 @@
     "has-flag": {
       "version": "3.0.0",
       "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
-      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+      "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+      "dev": true
     },
     "has-symbols": {
       "version": "1.0.1",
@@ -6864,7 +6960,8 @@
     "indexes-of": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
-      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc="
+      "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=",
+      "dev": true
     },
     "infer-owner": {
       "version": "1.0.4",
@@ -7862,6 +7959,7 @@
       "version": "1.1.0",
       "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
       "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
+      "dev": true,
       "requires": {
         "source-map": "^0.6.1"
       },
@@ -7869,7 +7967,8 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
         }
       }
     },
@@ -8932,6 +9031,7 @@
       "version": "7.0.35",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.35.tgz",
       "integrity": "sha512-3QT8bBJeX/S5zKTTjTCIjRF3If4avAT6kqxcASlTWEtAFCb9NH0OUxNDfgZSWdP5fJnBYCMEWkIFfWeugjzYMg==",
+      "dev": true,
       "requires": {
         "chalk": "^2.4.2",
         "source-map": "^0.6.1",
@@ -8941,12 +9041,14 @@
         "source-map": {
           "version": "0.6.1",
           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
-          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+          "dev": true
         },
         "supports-color": {
           "version": "6.1.0",
           "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
           "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+          "dev": true,
           "requires": {
             "has-flag": "^3.0.0"
           }
@@ -9465,6 +9567,7 @@
       "version": "6.0.4",
       "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.4.tgz",
       "integrity": "sha512-gjMeXBempyInaBqpp8gODmwZ52WaYsVOsfr4L4lDQ7n3ncD6mEyySiDtgzCT+NYC0mmeOLvtsF8iaEf0YT6dBw==",
+      "dev": true,
       "requires": {
         "cssesc": "^3.0.0",
         "indexes-of": "^1.0.1",
@@ -9524,7 +9627,8 @@
     "prettier": {
       "version": "1.19.1",
       "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
-      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew=="
+      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+      "dev": true
     },
     "prettier-linter-helpers": {
       "version": "1.0.0",
@@ -9603,7 +9707,8 @@
     "pseudomap": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
-      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM="
+      "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+      "dev": true
     },
     "psl": {
       "version": "1.4.0",
@@ -11054,6 +11159,7 @@
       "version": "5.5.0",
       "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
       "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+      "dev": true,
       "requires": {
         "has-flag": "^3.0.0"
       }
@@ -11567,7 +11673,8 @@
     "uniq": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
-      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8="
+      "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
+      "dev": true
     },
     "uniqs": {
       "version": "2.0.0",
@@ -11743,7 +11850,8 @@
     "util-deprecate": {
       "version": "1.0.2",
       "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
-      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
+      "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+      "dev": true
     },
     "util.promisify": {
       "version": "1.0.1",
@@ -11958,94 +12066,6 @@
         }
       }
     },
-    "vue-loader-v16": {
-      "version": "npm:vue-loader@16.1.2",
-      "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-16.1.2.tgz",
-      "integrity": "sha512-8QTxh+Fd+HB6fiL52iEVLKqE9N1JSlMXLR92Ijm6g8PZrwIxckgpqjPDWRP5TWxdiPaHR+alUWsnu1ShQOwt+Q==",
-      "dev": true,
-      "optional": true,
-      "requires": {
-        "chalk": "^4.1.0",
-        "hash-sum": "^2.0.0",
-        "loader-utils": "^2.0.0"
-      },
-      "dependencies": {
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.0",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
-          "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true,
-          "optional": true
-        },
-        "emojis-list": {
-          "version": "3.0.0",
-          "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
-          "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
-          "dev": true,
-          "optional": true
-        },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true,
-          "optional": true
-        },
-        "loader-utils": {
-          "version": "2.0.0",
-          "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
-          "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "big.js": "^5.2.2",
-            "emojis-list": "^3.0.0",
-            "json5": "^2.1.2"
-          }
-        },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "optional": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
-        }
-      }
-    },
     "vue-router": {
       "version": "3.5.1",
       "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.5.1.tgz",
@@ -12082,7 +12102,8 @@
     "vue-template-es2015-compiler": {
       "version": "1.9.1",
       "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz",
-      "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw=="
+      "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==",
+      "dev": true
     },
     "vuex": {
       "version": "3.6.2",

+ 24 - 0
src/test/java/com/izouma/jmrh/GenCodeTest.java

@@ -15,6 +15,7 @@ import org.springframework.test.context.junit4.SpringRunner;
 import org.springframework.util.ResourceUtils;
 
 import java.io.*;
+import java.nio.charset.StandardCharsets;
 import java.nio.file.Paths;
 import java.util.*;
 
@@ -117,4 +118,27 @@ public class GenCodeTest {
         temp.process(data, out);
 
     }
+
+
+
+    @Test
+    public void HexStringToJSONtes() {
+
+            String hexString = "8b7cdf172c824312c5af35bf5067ed7f9285e128a0d1a4885b247c160b62a0210d9007c346ce0d8a984d3c94aea7e9f44aec66a269c022bb661e96170961f3bc1b974746da46ac62c967c8048919f16be83766761c54f37a4290f05adcd52f003390b0f31157152a05c7145dcc6ff7e3ca8267c2162430db605956001884c9525fb4f6df6fbeb419937735937a78738ce80b3fd329e372adf8fe6c88e0cd4abdf1de8c4e0641fd5a4f02ea624669f4fe156b1f40c9efdf21ac9185c6a0b39ac5f052bcc0bd45e95d538b1d6f451ce9a0af948d7c6c1bdfc3b2b7f1093f342106e30d02f8ec53d36b39357d3cb9ef4035";
+
+
+        int len = hexString.length();
+        byte[] data = new byte[len / 2];
+        for (int i = 0; i < len; i += 2) {
+            data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4)
+                    + Character.digit(hexString.charAt(i+1), 16));
+        }
+           // byte[] bytes = hexStringToByteArray(hexString);
+            String jsonString = new String(data, StandardCharsets.UTF_8);
+
+            System.out.println(jsonString);
+
+
+
+    }
 }