更新時間:2021-07-05 15:55:07 來源:動力節(jié)點 瀏覽1230次
Spring MVC的攔截器(Interceptor)與Java Servlet的過濾器(Filter)類似,它主要用于攔截用戶的請求并做相應(yīng)的處理,通常應(yīng)用在權(quán)限驗證、記錄請求信息的日志、判斷用戶是否登錄等功能上。
攔截器的定義
在Spring MVC框架中定義一個攔截器需要對攔截器進(jìn)行定義和配置,定義一個攔截器可以通過兩種方式:一種是通過實現(xiàn)HandlerInterceptor接口或繼承HandlerInterceptor接口的實現(xiàn)類來定義;另一種是通過實現(xiàn)WebRequestInterceptor接口或繼承WebRequestInterceptor接口的實現(xiàn)類來定義。
本節(jié)以實現(xiàn)HandlerInterceptor接口的定義方式為例講解自定義攔截器的使用方法。示例代碼如下:
package interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class TestInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion方法在控制器的處理請求方法執(zhí)行完成后執(zhí)行,即視圖渲染結(jié)束之后執(zhí)行");
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle方法在控制器的處理請求方法調(diào)用之后,解析視圖之前執(zhí)行");
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("preHandle方法在控制器的處理請求方法調(diào)用之后,解析視圖之前執(zhí)行");
return false;
}
}
在上述攔截器的定義中實現(xiàn)了HandlerInterceptor接口,并實現(xiàn)了接口中的3個方法。有關(guān)這3個方法的描述如下。
攔截器的配置
讓自定義的攔截器生效需要在Spring MVC的配置文件中進(jìn)行配置,配置示例代碼如下:
<!-- 配置攔截器 -->
<mvc:interceptors>
<!-- 配置一個全局?jǐn)r截器,攔截所有請求 -->
<bean class="interceptor.TestInterceptor" />
<mvc:interceptor>
<!-- 配置攔截器作用的路徑 -->
<mvc:mapping path="/**" />
<!-- 配置不需要攔截作用的路徑 -->
<mvc:exclude-mapping path="" />
<!-- 定義<mvc:interceptor>元素中,表示匹配指定路徑的請求才進(jìn)行攔截 -->
<bean class="interceptor.Interceptor1" />
</mvc:interceptor>
<mvc:interceptor>
<!-- 配置攔截器作用的路徑 -->
<mvc:mapping path="/gotoTest" />
<!-- 定義在<mvc: interceptor>元素中,表示匹配指定路徑的請求才進(jìn)行攔截 -->
<bean class="interceptor.Interceptor2" />
</mvc:interceptor>
</mvc:interceptors>
在上述示例代碼中,<mvc:interceptors> 元素用于配置一組攔截器,其子元素 <bean> 定義的是全局?jǐn)r截器,即攔截所有的請求。
<mvc:interceptor> 元素中定義的是指定路徑的攔截器,其子元素 <mvc:mapping> 用于配置攔截器作用的路徑,該路徑在其屬性 path 中定義。
如上述示例代碼中,path 的屬性值“/**”表示攔截所有路徑,“/gotoTest”表示攔截所有以“/gotoTest”結(jié)尾的路徑。如果在請求路徑中包含不需要攔截的內(nèi)容,可以通過 <mvc:exclude-mapping> 子元素進(jìn)行配置。
需要注意的是,<mvc:interceptor> 元素的子元素必須按照 <mvc:mapping.../>、<mvc:exclude-mapping.../>、<bean.../> 的順序配置。
以上就是動力節(jié)點小編介紹的"SpringMVC攔截器詳解",希望對大家有幫助,想了解更多可查看SpringMVC教程,如有疑問,請在線咨詢,有專業(yè)老師隨時為您服務(wù)。
初級 202925
初級 203221
初級 202629
初級 203743