소스 검색

refactor: 自定义5个时间段的授权信息

zhanghaijun 3 년 전
부모
커밋
a5b9aa3ed0

+ 0 - 12
src/assembly/bin/run.bat

@@ -1,23 +1,11 @@
 @echo off
 @echo off
 chcp 65001
 chcp 65001
 
 
-rem 设置目标日期和时间
-set "targetDateTime=2023-10-09 23:59:59"
-
 :: Get the directory of the script
 :: Get the directory of the script
 for %%I in ("%~dp0.") do set "SCRIPT_DIR=%%~fI"
 for %%I in ("%~dp0.") do set "SCRIPT_DIR=%%~fI"
 :: Change directory to the parent directory of the script
 :: Change directory to the parent directory of the script
 cd /d "%SCRIPT_DIR%"
 cd /d "%SCRIPT_DIR%"
 
 
-rem 获取当前日期和时间
-for /f "delims=" %%a in ('wmic os get LocalDateTime ^| find "."') do set currentDateTime=%%a
-rem 比较日期和时间
-if "%currentDateTime%" gtr "%targetDateTime%" (
-    echo 授权已过期,请联系管理员
-    cscript msgbox.vbs "轨道交通插件 & 授权已过期,请联系管理员"
-	exit 1;
-)
-
 start /B /MIN cmd /C stop.bat 8080
 start /B /MIN cmd /C stop.bat 8080
 timeout /t 1 /nobreak
 timeout /t 1 /nobreak
 start /MIN cmd /C start.bat > NUL 2>&1
 start /MIN cmd /C start.bat > NUL 2>&1

+ 1 - 15
src/main/java/com/cec/plugins/PluginsApplication.java

@@ -1,31 +1,17 @@
 package com.cec.plugins;
 package com.cec.plugins;
 
 
-import com.cec.plugins.utils.LicenseUtil;
-import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.Banner;
 import org.springframework.boot.Banner;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 
-import java.io.IOException;
-
-@Slf4j
 @EnableAsync
 @EnableAsync
 @EnableScheduling
 @EnableScheduling
 @SpringBootApplication
 @SpringBootApplication
 public class PluginsApplication {
 public class PluginsApplication {
 
 
-    public static void main(String[] args) throws IOException {
-        if (LicenseUtil.licenseExpired()) {
-            LicenseUtil.runVbsExpired();
-            log.info("\033[1;33m {} \033[0m", String.format("\n ========== 启动服务 =========="
-                + "\n\t 授权时间已过期,请来及时联系管理员"
-                + "\n\t 授权时间至:\t%s"
-                + "\n\t 授权已过期:\t%s天"
-                + "\n ============================", LicenseUtil.licenseUntil(), LicenseUtil.licenseRemaining()));
-            System.exit(1);
-        }
+    public static void main(String[] args) {
         SpringApplication springApplication = new SpringApplication(PluginsApplication.class);
         SpringApplication springApplication = new SpringApplication(PluginsApplication.class);
         springApplication.setBannerMode(Banner.Mode.OFF);
         springApplication.setBannerMode(Banner.Mode.OFF);
         springApplication.run(args);
         springApplication.run(args);

+ 6 - 2
src/main/java/com/cec/plugins/config/LicenseFilter.java

@@ -2,7 +2,8 @@ package com.cec.plugins.config;
 
 
 import cn.hutool.json.JSONUtil;
 import cn.hutool.json.JSONUtil;
 import com.cec.plugins.domain.ResultData;
 import com.cec.plugins.domain.ResultData;
-import com.cec.plugins.utils.LicenseUtil;
+import com.cec.plugins.service.LicenseService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import javax.servlet.*;
 import javax.servlet.*;
@@ -17,11 +18,14 @@ import java.io.PrintWriter;
  */
  */
 @Component
 @Component
 @WebFilter(filterName = "licenseFilter", urlPatterns = "/*")
 @WebFilter(filterName = "licenseFilter", urlPatterns = "/*")
+@RequiredArgsConstructor
 public class LicenseFilter implements Filter {
 public class LicenseFilter implements Filter {
 
 
+    private final LicenseService licenseService;
+
     @Override
     @Override
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
-        if (LicenseUtil.licenseExpired()) {
+        if (licenseService.licenseExpired()) {
             response.setContentType("application/json");
             response.setContentType("application/json");
             response.setCharacterEncoding("UTF-8");
             response.setCharacterEncoding("UTF-8");
             PrintWriter writer = response.getWriter();
             PrintWriter writer = response.getWriter();

+ 6 - 3
src/main/java/com/cec/plugins/config/RunnerLog.java

@@ -2,6 +2,7 @@ package com.cec.plugins.config;
 
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
+import com.cec.plugins.service.LicenseService;
 import com.cec.plugins.utils.LicenseUtil;
 import com.cec.plugins.utils.LicenseUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -26,15 +27,17 @@ import java.util.Optional;
 @RequiredArgsConstructor
 @RequiredArgsConstructor
 public class RunnerLog implements ApplicationRunner {
 public class RunnerLog implements ApplicationRunner {
     private final ApplicationContext ctx;
     private final ApplicationContext ctx;
+    private final LicenseService licenseService;
 
 
     @Override
     @Override
     public void run(ApplicationArguments args) {
     public void run(ApplicationArguments args) {
-        if (LicenseUtil.licenseExpired()) {
+        if (licenseService.licenseExpired()) {
+            LicenseUtil.runVbsExpired();
             log.info("\033[1;33m {} \033[0m", String.format("\n ========== 启动服务 =========="
             log.info("\033[1;33m {} \033[0m", String.format("\n ========== 启动服务 =========="
                 + "\n\t 授权时间已过期,请来及时联系管理员"
                 + "\n\t 授权时间已过期,请来及时联系管理员"
                 + "\n\t 授权时间至:\t%s"
                 + "\n\t 授权时间至:\t%s"
                 + "\n\t 授权已过期:\t%s天"
                 + "\n\t 授权已过期:\t%s天"
-                + "\n ============================", LicenseUtil.licenseUntil(), LicenseUtil.licenseRemaining()));
+                + "\n ============================", licenseService.getLicenseUntilStr(), licenseService.licenseRemaining()));
             System.exit(SpringApplication.exit(ctx));
             System.exit(SpringApplication.exit(ctx));
         }
         }
         String appJvmName = ManagementFactory.getRuntimeMXBean().getName();
         String appJvmName = ManagementFactory.getRuntimeMXBean().getName();
@@ -51,7 +54,7 @@ public class RunnerLog implements ApplicationRunner {
                 + "\n\t 访问路径:\t%s"
                 + "\n\t 访问路径:\t%s"
                 + "\n ============================",
                 + "\n ============================",
             ctx.getEnvironment().getProperty("spring.application.name"),
             ctx.getEnvironment().getProperty("spring.application.name"),
-            LicenseUtil.licenseUntil(), LicenseUtil.licenseRemaining(),
+            licenseService.getLicenseUntilStr(), licenseService.licenseRemaining(),
             appJvmName.split("@")[0],
             appJvmName.split("@")[0],
             DateUtil.format(new Date(ctx.getStartupDate()), DatePattern.NORM_DATETIME_MS_PATTERN),
             DateUtil.format(new Date(ctx.getStartupDate()), DatePattern.NORM_DATETIME_MS_PATTERN),
             httpUrl
             httpUrl

+ 4 - 0
src/main/java/com/cec/plugins/config/properties/ProjectProperties.java

@@ -33,6 +33,7 @@ public class ProjectProperties {
         /** 间隔时间(毫秒) */
         /** 间隔时间(毫秒) */
         private long delayMillis = 1000L;
         private long delayMillis = 1000L;
 
 
+
         public String getHttpUtl(String url) {
         public String getHttpUtl(String url) {
             return this.getUrl() + url;
             return this.getUrl() + url;
         }
         }
@@ -44,6 +45,9 @@ public class ProjectProperties {
         private String ipAddress = "127.0.0.1";
         private String ipAddress = "127.0.0.1";
         /** 间隔时间(毫秒) */
         /** 间隔时间(毫秒) */
         private Integer port;
         private Integer port;
+        /** 服务名称 */
         private String serviceName = "guidaojiaotong_collection";
         private String serviceName = "guidaojiaotong_collection";
+        /** 授权码 */
+        private String license = "CECA_20230920";
     }
     }
 }
 }

+ 39 - 0
src/main/java/com/cec/plugins/service/LicenseService.java

@@ -0,0 +1,39 @@
+package com.cec.plugins.service;
+
+import cn.hutool.core.date.DateUtil;
+import com.cec.plugins.config.properties.ProjectProperties;
+import com.cec.plugins.utils.LicenseUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/9/9 17:42
+ * @description 授权控制
+ */
+@Slf4j
+@Service
+@RequiredArgsConstructor
+public class LicenseService {
+    private final ProjectProperties properties;
+
+    public Date getLicenseUntil() {
+        return LicenseUtil.DATE_MAP.getOrDefault(properties.getPlugin().getLicense(), LicenseUtil.DATE_MAP.get("CECA_20230920"));
+    }
+
+    public String getLicenseUntilStr() {
+        return DateUtil.formatDateTime(getLicenseUntil());
+    }
+
+    public boolean licenseExpired() {
+        return DateUtil.compare(DateUtil.date(), getLicenseUntil()) > 0;
+    }
+
+    public long licenseRemaining() {
+        return DateUtil.betweenDay(getLicenseUntil(), DateUtil.date(), true);
+    }
+
+}

+ 9 - 16
src/main/java/com/cec/plugins/utils/LicenseUtil.java

@@ -7,31 +7,24 @@ import lombok.extern.slf4j.Slf4j;
 
 
 import java.io.File;
 import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
-import java.util.Calendar;
-import java.util.GregorianCalendar;
+import java.util.*;
 
 
 /**
 /**
  * @author zhanghaijun
  * @author zhanghaijun
  * @date 2023/9/9 13:16
  * @date 2023/9/9 13:16
- * @description 授权检查
+ * @description 授权工具类
  */
  */
 @Slf4j
 @Slf4j
 @UtilityClass
 @UtilityClass
 public class LicenseUtil {
 public class LicenseUtil {
 
 
-    private static final Calendar VALID_UNTIL = DateUtil.endOfDay(new GregorianCalendar(2023, Calendar.OCTOBER, 9));
-
-    public boolean licenseExpired() {
-        return DateUtil.compare(DateUtil.date(), VALID_UNTIL.getTime()) > 0;
-    }
-
-    public String licenseUntil() {
-        return DateUtil.formatDateTime(VALID_UNTIL.getTime());
-    }
-
-    public long licenseRemaining() {
-        return DateUtil.betweenDay(VALID_UNTIL.getTime(), DateUtil.date(), true);
-    }
+    public static final Map<String, Date> DATE_MAP = new HashMap<String, Date>() {{
+        put("CECA_20230920", DateUtil.endOfDay(new GregorianCalendar(2023, Calendar.SEPTEMBER, 20)).getTime());
+        put("GQKL_20230930", DateUtil.endOfDay(new GregorianCalendar(2023, Calendar.SEPTEMBER, 30)).getTime());
+        put("KQJS_20231010", DateUtil.endOfDay(new GregorianCalendar(2023, Calendar.OCTOBER, 10)).getTime());
+        put("SYES_20231020", DateUtil.endOfDay(new GregorianCalendar(2023, Calendar.OCTOBER, 20)).getTime());
+        put("XMJF_20231030", DateUtil.endOfDay(new GregorianCalendar(2023, Calendar.OCTOBER, 30)).getTime());
+    }};
 
 
     public static boolean isWindows() {
     public static boolean isWindows() {
         return System.getProperties().getProperty("os.name").toUpperCase().contains("WINDOWS");
         return System.getProperties().getProperty("os.name").toUpperCase().contains("WINDOWS");

+ 1 - 0
src/main/resources/application-prod.yml

@@ -37,6 +37,7 @@ project:
     ip-address: 172.16.20.1
     ip-address: 172.16.20.1
     port: ${server.port}
     port: ${server.port}
     service-name: guidaojiaotong_collection
     service-name: guidaojiaotong_collection
+    license: CECA_20230920
   simulation:
   simulation:
     retries: 30
     retries: 30
     delay-millis: 500
     delay-millis: 500

+ 1 - 0
src/main/resources/application.yml

@@ -37,6 +37,7 @@ project:
     ip-address: ${PLUGIN_HOST:127.0.0.1}
     ip-address: ${PLUGIN_HOST:127.0.0.1}
     port: ${PLUGIN_PORT:${server.port}}
     port: ${PLUGIN_PORT:${server.port}}
     service-name: guidaojiaotong_collection
     service-name: guidaojiaotong_collection
+    license: ${PLUGIN_LICENSE:CECA_20230920}
   simulation:
   simulation:
     retries: ${SIMULATION_RETRIES:20}
     retries: ${SIMULATION_RETRIES:20}
     delay-millis: ${SIMULATION_DELAY-MILLIS:500}
     delay-millis: ${SIMULATION_DELAY-MILLIS:500}

+ 8 - 0
src/test/java/com/cec/plugins/PluginsApplicationTests.java

@@ -2,6 +2,7 @@ package com.cec.plugins;
 
 
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.lang.Assert;
 import cn.hutool.core.lang.Assert;
+import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.util.StrUtil;
 import com.cec.plugins.enumerate.EstimateEnum;
 import com.cec.plugins.enumerate.EstimateEnum;
 import com.cec.plugins.enumerate.TaskEnum;
 import com.cec.plugins.enumerate.TaskEnum;
@@ -35,6 +36,13 @@ class PluginsApplicationTests {
         Assert.equals(-1, compare, "授权已过期!授权时间至:{}", DateUtil.formatDateTime(end.getTime()));
         Assert.equals(-1, compare, "授权已过期!授权时间至:{}", DateUtil.formatDateTime(end.getTime()));
     }
     }
 
 
+    @Test
+    void licenseMd5(){
+        for (int i = 0; i < 6; i++) {
+            System.out.println(RandomUtil.randomStringUpper(4));
+        }
+    }
+
     @Test
     @Test
     void taskStatus() {
     void taskStatus() {
         String instanceId = clientSource.getCacheStr(TaskEnum.TaskInstanceId.getKey());
         String instanceId = clientSource.getCacheStr(TaskEnum.TaskInstanceId.getKey());