僅攔截特定 URL(如 `/admin/config`),放行其他所有請求(包括靜態資源、登錄頁、其他業務接口)。
<mvc:interceptors>
<!-- 定義攔截器 Bean -->
<bean id="singleUrlInterceptor" class="com.example.interceptor.SingleUrlInterceptor"/>
<mvc:interceptor>
<mvc:mapping path="/admin/config"/> <!-- 精確匹配單一路徑 -->
<mvc:exclude-mapping path="/admin/config/**"/> <!-- 排除子路徑(可選) -->
<ref bean="singleUrlInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SingleUrlInterceptor())
.addPathPatterns("/admin/config") // 僅攔截此路徑
.excludePathPatterns("/admin/config/**"); // 排除子路徑(視業務而定)
}
}
public class SingleUrlInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 1. 檢查登錄狀態、權限、Token 等
HttpSession session = request.getSession();
if (session.getAttribute("user") == null) {
response.sendRedirect("/login"); // 未登錄跳轉
return false; // 阻塞請求
}
// 2. 特定業務邏輯(如記錄訪問日誌、限流)
log.info("訪問受保護配置頁: {}", request.getRequestURI());
return true; // 放行
}
}