首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Spring MVC攔截器精確攔截單一URL路徑配置指南

     編輯:程式設計綜合問答

場景

僅攔截特定 URL(如 `/admin/config`),放行其他所有請求(包括靜態資源、登錄頁、其他業務接口)。

方式一:XML 配置 `mvc:interceptors` (傳統項目)

<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>

方式二:Java Config 實現 `WebMvcConfigurer` (Spring Boot / 現代項目)

@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; // 放行
    }
}

關鍵點總結

  • `addPathPatterns("/exact/path")` 精確匹配,不支持 Ant 風格通配符時等同於精確。
  • 靜態資源 (`.css`, `.js`, `.png`) 默認不經 `DispatcherServlet`,**無需配置排除**。
  • 若需攔截一組相關路徑,使用 `/admin/**` 並配合 `excludePathPatterns` 精細控制。
  • 攔截器順序敏感:`registry.addInterceptor` 調用順序決定執行鏈順序。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved