Przeglądaj źródła

refactor: 添加授权时间 授权时间至 2023-10-09

zhanghaijun 3 lat temu
rodzic
commit
493ac41366

+ 33 - 0
src/main/java/com/cec/plugins/config/LicenseFilter.java

@@ -0,0 +1,33 @@
+package com.cec.plugins.config;
+
+import cn.hutool.json.JSONUtil;
+import com.cec.plugins.domain.ResultData;
+import com.cec.plugins.utils.LicenseUtil;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.*;
+import javax.servlet.annotation.WebFilter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/9/9 13:58
+ * @description 请求拦截器,验证授权信息
+ */
+@Component
+@WebFilter(filterName = "licenseFilter", urlPatterns = "/*")
+public class LicenseFilter implements Filter {
+
+    @Override
+    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
+        if (LicenseUtil.licenseExpired()) {
+            response.setContentType("application/json");
+            response.setCharacterEncoding("UTF-8");
+            PrintWriter writer = response.getWriter();
+            writer.write(JSONUtil.toJsonStr(ResultData.fail("插件授权已过期,请联系管理员")));
+            return;
+        }
+        chain.doFilter(request, response);
+    }
+}

+ 9 - 0
src/main/java/com/cec/plugins/config/RunnerLog.java

@@ -2,10 +2,12 @@ package com.cec.plugins.config;
 
 import cn.hutool.core.date.DatePattern;
 import cn.hutool.core.date.DateUtil;
+import com.cec.plugins.utils.LicenseUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.ApplicationArguments;
 import org.springframework.boot.ApplicationRunner;
+import org.springframework.boot.SpringApplication;
 import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Component;
 
@@ -27,6 +29,13 @@ public class RunnerLog implements ApplicationRunner {
 
     @Override
     public void run(ApplicationArguments args) {
+        if (LicenseUtil.licenseExpired()) {
+            log.info("\033[1;33m {} \033[0m", String.format("\n ========== 启动服务 =========="
+                + "\n\t 授权时间已过期,请来及时联系管理员"
+                + "\n\t 授权时间:\t%s"
+                + "\n ============================", LicenseUtil.licenseUntil()));
+            System.exit(SpringApplication.exit(ctx));
+        }
         String appJvmName = ManagementFactory.getRuntimeMXBean().getName();
         String path = Optional.ofNullable(ctx.getEnvironment().getProperty("server.servlet.context-path")).orElse("");
         String httpPort = ctx.getEnvironment().getProperty("server.port");

+ 27 - 0
src/main/java/com/cec/plugins/utils/LicenseUtil.java

@@ -0,0 +1,27 @@
+package com.cec.plugins.utils;
+
+import cn.hutool.core.date.DateUtil;
+import lombok.experimental.UtilityClass;
+
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
+/**
+ * @author zhanghaijun
+ * @date 2023/9/9 13:16
+ * @description 授权检查
+ */
+@UtilityClass
+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());
+    }
+
+}

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

@@ -1,5 +1,7 @@
 package com.cec.plugins;
 
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.lang.Assert;
 import cn.hutool.core.util.StrUtil;
 import com.cec.plugins.enumerate.EstimateEnum;
 import com.cec.plugins.enumerate.TaskEnum;
@@ -10,6 +12,9 @@ import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import java.util.Calendar;
+import java.util.GregorianCalendar;
+
 /**
  * {@see 'https://www.cnblogs.com/east7/p/16255305.html'}
  */
@@ -22,6 +27,14 @@ class PluginsApplicationTests {
     @Autowired
     private RedisClientEvaluate clientEvaluate;
 
+    @Test
+    void licenseTest() {
+        Calendar end = DateUtil.endOfDay(new GregorianCalendar(2023, Calendar.OCTOBER, 9));
+        System.out.println("授权时间:" + DateUtil.formatDateTime(end.getTime()));
+        int compare = DateUtil.compare(DateUtil.date(), end.getTime());
+        Assert.equals(-1, compare, "授权已过期!授权时间至:{}", DateUtil.formatDateTime(end.getTime()));
+    }
+
     @Test
     void taskStatus() {
         String instanceId = clientSource.getCacheStr(TaskEnum.TaskInstanceId.getKey());