523096025 před 4 roky
rodič
revize
8efcac1229

+ 7 - 3
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/controller/TokenController.java

@@ -2,9 +2,12 @@ package com.huimv.apiservice.controller;
 
 import cn.hutool.json.JSONObject;
 import com.huimv.common.utils.TokenUtil;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Map;
+
 /**
  * @Project : huimv.shiwan
  * @Package : com.huimv.apiservice.controller
@@ -26,9 +29,10 @@ public class TokenController {
 
         return  result;
     }
+    @RequestMapping("/findAll")
+    public String findAll(@RequestBody Map<String,Object> map){
+        System.out.println(map);
+       return "尹浩";
 
-    @RequestMapping("/verify")
-    public boolean getToken(String  verify){
-        return  TokenUtil.verify(verify);
     }
 }

+ 0 - 45
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/utils/ApiSignCreate.java

@@ -1,45 +0,0 @@
-//package com.huimv.apiservice.utils;
-//
-//
-//import org.apache.catalina.security.SecurityUtil;
-//
-//import javax.crypto.Cipher;
-//import java.security.PrivateKey;
-//import java.util.ArrayList;
-//import java.util.Collections;
-//import java.util.List;
-//import java.util.Map;
-//
-///**
-// * @Author yinhao
-// * @Date 2021/4/28 19:01
-// * @Description
-// */
-//public class ApiSignCreate {
-//
-//    public static String getSortedContent(Map<String, String> data) {
-//        StringBuffer content = new StringBuffer();
-//        List<String> keys = new ArrayList<String>(data.keySet());
-//        Collections.sort(keys);
-//        int index = 0;
-//        for (String key : keys) {
-//            String value = data.get(key);
-//            content.append((index == 0 ? "" : "&")).append(key).append("=").append(value);
-//            index++;
-//        }
-//        return content.toString();
-//    }
-//
-//    public static String EncryptByRSAPriKey(String content,String priKey) throws Exception {
-//        try {
-//            PrivateKey privateKey = SecurityUtil.getRSAPriKey(priKey);
-//            Cipher cipher = Cipher.getInstance(privateKey.getAlgorithm());
-//            cipher.init(Cipher.ENCRYPT_MODE, privateKey);
-//            cipher.update(content.getBytes(SecurityUtil.RSA_CHARSET));
-//            return SecurityUtil.encodeBase64(cipher.doFinal());
-//        } catch (Exception e) {
-//            e.printStackTrace();
-//            throw new Exception();
-//        }
-//    }
-//}

+ 0 - 12
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/utils/ApiVerifyUtil.java

@@ -1,12 +0,0 @@
-package com.huimv.apiservice.utils;
-
-/**
- * @Author yinhao
- * @Date 2021/4/28 19:00
- * @Description
- */
-public class ApiVerifyUtil {
-
-
-
-}

+ 0 - 134
huimv-smart-apiservice/src/main/java/com/huimv/apiservice/utils/SimpleApiSignInterceptor.java

@@ -1,134 +0,0 @@
-//package com.huimv.apiservice.utils;
-//
-//import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
-//import org.springframework.web.util.WebUtils;
-//
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//import java.io.IOException;
-//import java.io.StringReader;
-//import java.io.UnsupportedEncodingException;
-//import java.util.*;
-//import java.util.concurrent.ConcurrentHashMap;
-//
-///**
-// * Author: Kelin
-// * Date:  2018/5/16
-// * Description:
-// */
-//@SuppressWarnings("SuspiciousMethodCalls")
-//public class SimpleApiSignInterceptor extends HandlerInterceptorAdapter {
-//
-//    // 签名超时时长,默认时间为5分钟,ms
-//    private static final int SIGN_EXPIRED_TIME = 5 * 60 * 1000;
-//
-//    private static final String API_SIGN_KEY_CONFIG_PATH = "/mop/common/system/api_sign_key_mapping.properties";
-//
-//    private static final String SIGN_KEY = "sign";
-//
-//    private static final String TIMESTAMP_KEY = "timestamp";
-//
-//    private static final String ACCESS_KEY = "accessKey";
-//
-//    private static final String ACCESS_SECRET = "accessSecret";
-//
-//    private static Map<String, String> map = new ConcurrentHashMap<String, String>();
-//
-//
-//    static {
-//        // 从zk加载key映射到内存里面
-//        try {
-//            String data = ZKClient.get().getStringData(API_SIGN_KEY_CONFIG_PATH);
-//            Properties properties = new Properties();
-//            properties.load(new StringReader(data));
-//            for (Object key : properties.keySet()) {
-//                map.put(String.valueOf(key), properties.getProperty(String.valueOf(key)));
-//            }
-//        } catch (KeeperException e) {
-//            e.printStackTrace();
-//        } catch (InterruptedException e) {
-//            e.printStackTrace();
-//        } catch (IOException e) {
-//            e.printStackTrace();
-//        }
-//
-//    }
-//
-//    @Override
-//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-//
-//        Map<String, Object> result = new HashMap<String, Object>();
-//        String timestamp = request.getParameter(TIMESTAMP_KEY);
-//        String accessKey = request.getParameter(ACCESS_KEY);
-//        String accessSecret = map.get(accessKey);
-//
-//        if (!org.apache.commons.lang.StringUtils.isNumeric(timestamp)) {
-//            result.put("code", 1000);
-//            result.put("msg", "请求时间戳不合法");
-//            WebUtils.writeJsonByObj(result, response, request);
-//            return false;
-//        }
-//
-//        // 检查KEY是否合理
-//        if (StringUtils.isEmpty(accessKey) || StringUtils.isEmpty(accessSecret)) {
-//            result.put("code", 1001);
-//            result.put("msg", "加密KEY不合法");
-//            WebUtils.writeJsonByObj(result, response, request);
-//            return false;
-//        }
-//        Long ts = Long.valueOf(timestamp);
-//        // 禁止超时签名
-//        if (System.currentTimeMillis() - ts > SIGN_EXPIRED_TIME) {
-//            result.put("code", 1002);
-//            result.put("msg", "请求超时");
-//            WebUtils.writeJsonByObj(result, response, request);
-//            return false;
-//        }
-//
-//        if (!verificationSign(request, accessKey, accessSecret)) {
-//            result.put("code", 1003);
-//            result.put("msg", "签名错误");
-//            WebUtils.writeJsonByObj(result, response, request);
-//            return false;
-//        }
-//        return true;
-//    }
-//
-//    private boolean verificationSign(HttpServletRequest request, String accessKey, String accessSecret) throws UnsupportedEncodingException {
-//        Enumeration<?> pNames = request.getParameterNames();
-//        Map<String, Object> params = new HashMap<String, Object>();
-//        while (pNames.hasMoreElements()) {
-//            String pName = (String) pNames.nextElement();
-//            if (SIGN_KEY.equals(pName)) continue;
-//            Object pValue = request.getParameter(pName);
-//            params.put(pName, pValue);
-//        }
-//        String originSign = request.getParameter(SIGN_KEY);
-//        String sign = createSign(params, accessSecret);
-//        return sign.equals(originSign);
-//    }
-//
-//    private String createSign(Map<String, Object> params, String accessSecret) throws UnsupportedEncodingException {
-//        Set<String> keysSet = params.keySet();
-//        Object[] keys = keysSet.toArray();
-//        Arrays.sort(keys);
-//        StringBuilder temp = new StringBuilder();
-//        boolean first = true;
-//        for (Object key : keys) {
-//            if (first) {
-//                first = false;
-//            } else {
-//                temp.append("&");
-//            }
-//            temp.append(key).append("=");
-//            Object value = params.get(key);
-//            String valueString = "";
-//            if (null != value) {
-//                valueString = String.valueOf(value);
-//            }
-//            temp.append(valueString);
-//        }
-//        temp.append("&").append(ACCESS_SECRET).append("=").append(accessSecret);
-//        return MD5Util.MD52(temp.toString()).toUpperCase();
-//    }
-//}

+ 1 - 1
huimv-smart-apiservice/src/main/resources/application-dev.yml

@@ -24,7 +24,7 @@ spring:
     type: com.alibaba.druid.pool.DruidDataSource
     druid:
       driver-class-name: com.mysql.cj.jdbc.Driver
-      url: jdbc:mysql://localhost:3306/huimv_smart_msg?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
+      url: jdbc:mysql://localhost:3306/huimv_smart_mgt?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
       username: root
       password: root
       initial-size: 10

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4 - 0
huimv-smart-common/src/main/java/com/huimv/common/utils/Constant.java


+ 2 - 2
huimv-smart-common/src/main/java/com/huimv/common/utils/TokenUtil.java

@@ -17,7 +17,7 @@ import java.util.Date;
  **/
 public class TokenUtil {
 
-    private static final long EXPIRE_TIME = 60*1000;  //有效时长
+    private static final long EXPIRE_TIME = 60*60*1000;  //有效时长
     private static final String TOKEN_SECRET = "ben";       // 秘钥
 
     /**
@@ -50,7 +50,7 @@ public class TokenUtil {
                     .withIssuer("auth0").build();
             DecodedJWT jwt = verifier.verify(token);
             System.out.println("认证通过");
-            System.out.println("userName:"+jwt.getClaims().toString());
+//            System.out.println("userName:"+jwt.getClaims().toString());
             System.out.println("过期时间:"+jwt.getExpiresAt());
             return true;
         }catch (Exception e){

+ 6 - 1
huimv-smart-gateway/pom.xml

@@ -24,7 +24,12 @@
             <artifactId>huimv-smart-common</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
-
+        <dependency>
+            <groupId>commons-codec</groupId>
+            <artifactId>commons-codec</artifactId>
+            <version>1.15</version>
+            <scope>compile</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-gateway</artifactId>

+ 89 - 0
huimv-smart-gateway/src/main/java/com/huimv/gateway/filter/ApiLocator.java

@@ -0,0 +1,89 @@
+package com.huimv.gateway.filter;
+
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.cloud.gateway.route.RouteLocator;
+import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.MediaType;
+
+/**
+ * @author lili
+ * @description ${DESCRIPTION}
+ * @create 2018-12-13 13:20
+ * @since
+ **/
+@EnableAutoConfiguration
+@Configuration
+@Log4j2
+public class ApiLocator {
+
+    @Autowired
+    private RequestFilter requestFilter;
+
+    private static final String SERVICE = "/path/**";
+    private static final String URI = "http://127.0.0.1:8009";
+
+    @Bean
+    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
+
+        /*
+        route1 是get请求,get请求使用readBody会报错
+        route2 是post请求,Content-Type是application/x-www-form-urlencoded,readbody为String.class
+        route3 是post请求,Content-Type是application/json,readbody为Object.class
+         */
+        RouteLocatorBuilder.Builder routes = builder.routes();
+        RouteLocatorBuilder.Builder serviceProvider = routes
+                .route("route1",
+                        r -> r
+                                .method(HttpMethod.GET)
+                                .and()
+                                .path(SERVICE)
+                                .filters(f -> {
+                                    f.filter(requestFilter);
+                                    return f;
+                                })
+                                .uri(URI))
+                .route("route2",
+                        r -> r
+                                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_FORM_URLENCODED_VALUE)
+                                .and()
+                                .method(HttpMethod.POST)
+                                .and()
+                                .readBody(String.class, readBody -> {
+                                    log.info("request method POST, Content-Type is application/x-www-form-urlencoded, body  is:{}", readBody);
+                                    return true;
+                                })
+                                .and()
+                                .path(SERVICE)
+                                .filters(f -> {
+                                    f.filter(requestFilter);
+                                    return f;
+                                })
+                                .uri(URI))
+                .route("route3",
+                        r -> r
+                                .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
+                                .and()
+                                .method(HttpMethod.POST)
+                                .and()
+                                .readBody(Object.class, readBody -> {
+                                    log.info("request method POST, Content-Type is application/json, body  is:{}", readBody);
+                                    return true;
+                                })
+                                .and()
+                                .path(SERVICE)
+                                .filters(f -> {
+                                    f.filter(requestFilter);
+                                    return f;
+                                })
+                                .uri(URI));
+        RouteLocator routeLocator = serviceProvider.build();
+        log.info("custom RouteLocator is loading ... {}", routeLocator);
+        return routeLocator;
+    }
+}

+ 46 - 0
huimv-smart-gateway/src/main/java/com/huimv/gateway/filter/RequestFilter.java

@@ -0,0 +1,46 @@
+package com.huimv.gateway.filter;
+
+import cn.hutool.json.JSONObject;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.cloud.gateway.filter.GatewayFilter;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.core.Ordered;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.core.io.buffer.DataBufferUtils;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+import springfox.documentation.spring.web.json.Json;
+
+import java.nio.CharBuffer;
+import java.nio.charset.StandardCharsets;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * @author lili
+ * @description ${DESCRIPTION}
+ * @create 2018-12-11 11:50
+ * @since
+ **/
+
+@Log4j2
+@Component
+public class RequestFilter implements GatewayFilter, Ordered {
+    @Override
+    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+
+        return chain.filter(exchange).then(Mono.fromRunnable(() -> {
+            System.out.println("RequestFilter post filter");
+        }));
+    }
+
+    @Override
+    public int getOrder() {
+        return -5;
+    }
+
+}

+ 14 - 6
huimv-smart-gateway/src/main/java/com/huimv/gateway/filter/SignVerifyFilter.java

@@ -1,6 +1,8 @@
+/*
 package com.huimv.gateway.filter;
 
 import com.alibaba.fastjson.JSONObject;
+import com.huimv.common.utils.Constant;
 import com.huimv.gateway.utils.JdkSignatureUtil;
 import io.netty.buffer.ByteBufAllocator;
 import lombok.extern.slf4j.Slf4j;
@@ -29,17 +31,20 @@ import java.util.Comparator;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicReference;
 
+*/
 /**
  * @Author yinhao
  * @Date 2021/5/6 9:26
  * @Description
- */
+ *//*
+
 @Slf4j
 @Component
 public class  SignVerifyFilter implements GlobalFilter, Ordered {
 
-    @Value("${huimv.public-key}")
-    private String PUBLIC_KEY;
+//    @Value("${huimv.public-key}")
+//    private
+//    String PUBLIC_KEY;
 
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
@@ -59,7 +64,7 @@ public class  SignVerifyFilter implements GlobalFilter, Ordered {
                 jsonObject.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getKey)).forEach(entry ->
                         sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&"));
                 String paramStr = sb.toString().substring(0, sb.length() - 1);
-                boolean result = JdkSignatureUtil.verifySignature(PUBLIC_KEY,decode,paramStr);
+                boolean result = JdkSignatureUtil.verifySignature(Constant.RSA_SIGN_PUBLIC_KEY,decode,paramStr);
                 if (!result) {
                     response.setStatusCode(HttpStatus.FORBIDDEN);
                     return response.setComplete();
@@ -92,11 +97,13 @@ public class  SignVerifyFilter implements GlobalFilter, Ordered {
         return chain.filter(exchange);
     }
 
-    /**
+    */
+/**
      * 从Flux<DataBuffer>中获取字符串的方法
      *
      * @return 请求体
-     */
+     *//*
+
     private String resolveBodyFromRequest(ServerHttpRequest serverHttpRequest) {
         //获取请求体
         Flux<DataBuffer> body = serverHttpRequest.getBody();
@@ -125,3 +132,4 @@ public class  SignVerifyFilter implements GlobalFilter, Ordered {
         return 1;
     }
 }
+*/

+ 66 - 20
huimv-smart-gateway/src/main/java/com/huimv/gateway/filter/TokenSignFilter.java

@@ -1,20 +1,32 @@
 package com.huimv.gateway.filter;
 
 
+import com.huimv.common.utils.TokenUtil;
 import com.huimv.gateway.utils.JwtUtils;
 import io.jsonwebtoken.Claims;
+import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.core.Ordered;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.http.server.reactive.ServerHttpResponse;
 import org.springframework.stereotype.Component;
+import org.springframework.util.MultiValueMap;
 import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Flux;
 import reactor.core.publisher.Mono;
+import org.apache.commons.codec.binary.Hex;
+
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+import java.util.List;
+import java.util.Map;
 
 /**
  * @Author yinhao
@@ -28,43 +40,77 @@ public class TokenSignFilter implements GlobalFilter, Ordered {
     @Autowired
     private JwtUtils jwtUtils;
 
+
+
+    @SneakyThrows
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+
+
+
         ServerHttpRequest request = exchange.getRequest();
         ServerHttpResponse response = exchange.getResponse();
 
-        //登录接口不参与过滤
-        if (request.getURI().getPath().contains("/login")) {
+
+        if (request.getURI().getPath().contains("/getToken")) {
             return chain.filter(exchange);
         }
 
-        String token = request.getHeaders().getFirst(jwtUtils.getHeader());
-        if (StringUtils.isEmpty(token)) {
+
+        Map<String,String> requestBody = exchange.getAttribute("cachedRequestBodyObject");
+        String token = requestBody.get("token");
+        if (!TokenUtil.verify(token)){
             response.setStatusCode(HttpStatus.UNAUTHORIZED);
             return response.setComplete();
         }
 
-        try {
-
-            Claims claims = jwtUtils.getClaimByToken(token);
-            if (claims == null || jwtUtils.isTokenExpired(claims.getExpiration())) {
-                response.setStatusCode(HttpStatus.UNAUTHORIZED);
-                return response.setComplete();
-                //throw new RRException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
-            }
-
-            Long id = Long.parseLong(claims.getSubject());
-            log.info("find userId: {} from uri: {}", id, request.getURI());
-            ServerHttpRequest serverHttpRequest = request.mutate().headers(httpHeaders -> httpHeaders.add("userId", id + "")).build();
-            exchange.mutate().request(serverHttpRequest).build();
+        String random = requestBody.get("random");
+        String timestamp = requestBody.get("timestamp");
+        String sign = requestBody.get("sign");
 
-        } catch (Exception e) {
-            e.printStackTrace();
-            //向客户端返回错误提示信息
+        MessageDigest md = MessageDigest.getInstance("MD5");
+        String data = random +";" +timestamp;
+        String oneSign = Hex.encodeHexString(md.digest(data.getBytes(StandardCharsets.UTF_8)));
+        oneSign =oneSign +"HuiMv";
+        String twoSign = Hex.encodeHexString(md.digest(oneSign.getBytes(StandardCharsets.UTF_8)));
+        if (!sign.equals(twoSign)){
             response.setStatusCode(HttpStatus.UNAUTHORIZED);
             return response.setComplete();
         }
 
+
+        //登录接口不参与过滤
+//        if (request.getURI().getPath().contains("/login")) {
+//            return chain.filter(exchange);
+//        }
+//
+//        String token = request.getHeaders().getFirst(jwtUtils.getHeader());
+//        if (StringUtils.isEmpty(token)) {
+//            response.setStatusCode(HttpStatus.UNAUTHORIZED);
+//            return response.setComplete();
+//        }
+//
+//        try {
+//
+//            Claims claims = jwtUtils.getClaimByToken(token);
+//            if (claims == null || jwtUtils.isTokenExpired(claims.getExpiration())) {
+//                response.setStatusCode(HttpStatus.UNAUTHORIZED);
+//                return response.setComplete();
+//                //throw new RRException(jwtUtils.getHeader() + "失效,请重新登录", HttpStatus.UNAUTHORIZED.value());
+//            }
+//
+//            Long id = Long.parseLong(claims.getSubject());
+//            log.info("find userId: {} from uri: {}", id, request.getURI());
+//            ServerHttpRequest serverHttpRequest = request.mutate().headers(httpHeaders -> httpHeaders.add("userId", id + "")).build();
+//            exchange.mutate().request(serverHttpRequest).build();
+//
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            //向客户端返回错误提示信息
+//            response.setStatusCode(HttpStatus.UNAUTHORIZED);
+//            return response.setComplete();
+//        }
+
         return chain.filter(exchange);
     }
 

+ 1 - 1
huimv-smart-gateway/src/main/java/com/huimv/gateway/utils/JwtUtils.java

@@ -16,7 +16,7 @@ import java.util.Date;
  *
  * @author huimv
  */
-@ConditionalOnMissingBean(JwtUtils.class)
+//@ConditionalOnMissingBean(name = "jwtUtils")
 @ConfigurationProperties(prefix = "huimv.jwt")
 @Component
 public class JwtUtils {

+ 6 - 0
huimv-smart-gateway/src/main/resources/application.yml

@@ -25,6 +25,12 @@ spring:
             - Path=/api/**
           filters:
             - RewritePath=/api/(?<segment>/?.*), /renren-fast/$\{segment}
+        - id: environment_route
+          uri: http://192.168.1.54:9000
+          predicates:
+            - Path=/token/**
+          filters:
+            - StripPrefix=1
 #      discovery:
 #        locator:
 #          enabled: true                 # 设置为true 请求路径前可以添加微服务名称  http://localhost:88/gateway-provider/goods/findOne/2 -> http://localhost:88/goods/findOne/2

+ 31 - 8
huimv-smart-management/src/main/java/com/huimv/management/Abc.java

@@ -3,6 +3,15 @@ package com.huimv.management;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
+import com.huimv.common.utils.R;
+import com.huimv.management.rsa.Constants;
+import com.huimv.management.rsa.JdkSignatureUtil;
+
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.security.SignatureException;
+import java.security.spec.InvalidKeySpecException;
+import java.util.Random;
 
 
 /**
@@ -12,14 +21,28 @@ import cn.hutool.core.date.DateUtil;
  */
 public class Abc {
 
-    public static void main(String[] args) {
-        System.out.println(DateUtil.date());
-        DateTime dateTime = DateUtil.offsetDay(DateUtil.date(), 1);
-        System.out.println(dateTime);
-        DateTime dateTime1 = DateUtil.beginOfDay(dateTime);
-        System.out.println(dateTime1);
-        long between = DateUtil.between(DateUtil.date(), dateTime1, DateUnit.SECOND);
-        System.out.println(between);
+    public static void main(String[] args) throws InvalidKeySpecException, NoSuchAlgorithmException, InvalidKeyException, SignatureException {
+//        System.out.println(DateUtil.date());
+//        DateTime dateTime = DateUtil.offsetDay(DateUtil.date(), 1);
+//        System.out.println(dateTime);
+//        DateTime dateTime1 = DateUtil.beginOfDay(dateTime);
+//        System.out.println(dateTime1);
+//        long between = DateUtil.between(DateUtil.date(), dateTime1, DateUnit.SECOND);
+//        System.out.println(between);
+        StringBuffer sb = new StringBuffer();
+        sb.append("token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJhdXRoMCIsImV4cCI6MTYyMDI5ODk3MX0.nL-qBjjshGWWLkT1Si5MpjZ_6kA_VcF443Iq2jbEG7g&");
+
+        Random random = new Random();
+        sb.append("random=").append(random.nextInt(100)).append("&");
+        sb.append("timestamp=").append(System.currentTimeMillis());
+
+        String paramStr = sb.toString();
+
+        String sign = JdkSignatureUtil.executeSignature(Constants.RSA_SIGN_PRIVATE_KEY, paramStr);
+
+        System.out.println(paramStr);
+
 
+        System.out.println(sign);
     }
 }