feat(validation): wjy添加系统过期校验拦截器

- 新增 ValidationInterceptor 拦截器实现系统过期检查
- 配置拦截器注册,排除 /error 路径
- 实现基于 Base64期日期配置 编码的过读取
- 添加系统过期时的 JSON 格式错误响应
- 提供静态方法供外部调用检查系统状态
- 记录系统过期检查相关日志信息
master
zangch@mesnac.com 4 months ago
parent 5aa36a9788
commit d51a18af8d

@ -0,0 +1,28 @@
package com.aucma.framework.validation;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* @author Wen JY
* @description:
* @date 2025-10-09 17:14:00
* @version: 1.0
*/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Bean
public ValidationInterceptor interceptor() {
return new ValidationInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor())
.addPathPatterns("/**")
.excludePathPatterns("/error");
}
}

@ -0,0 +1,93 @@
package com.aucma.framework.validation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Base64;
/**
* @author Wen JY
* @description:
* @date 2025-10-09 17:20:25
* @version: 1.0
*/
public class ValidationInterceptor implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(ValidationInterceptor.class);
// 配置系统过期日期(可以从配置文件中读取)
@Value("${system.expire.date:MjAyNi0wMS0wMQ==}") // 默认2026-01-01
private String expireDateBase64;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 检查是否已过期
if (isSystemExpired()) {
handleExpiredRequest(request, response);
return false; // 拦截请求
}
return true; // 放行请求
}
/**
*
*/
public boolean isSystemExpired() {
try {
byte[] decode = Base64.getDecoder().decode(expireDateBase64);
String dateStr = new String(decode, StandardCharsets.UTF_8);
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd");
LocalDate expireDate = LocalDate.parse(dateStr, dtf);
LocalDate currentDate = LocalDate.now();
logger.debug("系统过期检查: 当前日期={}, 过期日期={}, 是否过期={}",
currentDate, expireDate, currentDate.isAfter(expireDate));
return currentDate.isAfter(expireDate);
} catch (Exception e) {
logger.error("系统过期检查失败,默认不拦截", e);
return false; // 解析失败时默认不拦截,避免影响系统正常运行
}
}
/**
*
*/
private void handleExpiredRequest(HttpServletRequest request, HttpServletResponse response) throws IOException {
logger.warn("拦截过期系统访问: {} {}", request.getMethod(), request.getRequestURI());
response.setStatus(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
response.setContentType("application/json;charset=UTF-8");
String errorResponse = "{\"code\": 503, \"message\": \"系统已过期,请联系管理员\", \"timestamp\": \""
+ Instant.now().toString() + "\"}";
response.getWriter().write(errorResponse);
response.getWriter().flush();
}
/**
*
*/
public static boolean checkSystemStatus() {
try {
ValidationInterceptor interceptor = new ValidationInterceptor();
interceptor.expireDateBase64 = "MjAyNi0wMS0wMQ=="; //默认 2026-01-01
return !interceptor.isSystemExpired();
} catch (Exception e) {
return true; // 检查失败时默认系统可用
}
}
}
Loading…
Cancel
Save