package com.ruoyi.web.config; import java.net.InetAddress; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; /** 将临时 BTS 模拟器页面和控制 API 限制在本机。 */ @Configuration public class BtsDevelopmentSimulatorWebConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new LocalOnlyInterceptor()) .addPathPatterns("/dev/bts-simulator.html", "/dev/bts-simulator/**"); } public static final class LocalOnlyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { if (isLoopback(request.getRemoteAddr())) return true; response.sendError(HttpServletResponse.SC_FORBIDDEN, "BTS simulator controls are local-only"); return false; } private boolean isLoopback(String remoteAddress) { try { return remoteAddress != null && InetAddress.getByName(remoteAddress).isLoopbackAddress(); } catch (Exception ignored) { return false; } } } }