在springmvc.xml文件中配置:
<mvc:interceptors> <!-- 配置自定義的攔截器 --> <bean class="com.gong.springmvc.interceptors.FirstInterceptor"></bean> <mvc:interceptor> <mvc:mapping path="/emps"/> <bean class="com.gong.springmvc.interceptors.SecondInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
FirstInterceptor.java
package com.gong.springmvc.interceptors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class FirstInterceptor implements HandlerInterceptor{ //該方法在目標方法之前被調用 //如果返回true,則繼續調用后續的攔截器和目標方法,若為false,則不會在調用后續的攔截器和目標方法 //該方法可以考慮做權限、日志、事務等 @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("[FirstInterceptor] preHandle"); return true; } //調用目標方法之后,但在渲染視圖之前被調用 //可以修改請求域中的屬性或視圖做出修改 @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("[FirstInterceptor] postHandle"); } //在渲染視圖之后被調用 //釋放資源 @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("[FirstInterceptor] afterCompletion"); } }
SecondInceptor.java
package com.gong.springmvc.interceptors; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class SecondInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("[SecondInterceptor] preHandle"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("[SecondInterceptor] postHandle"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("[SecondInterceptor] afterCompletion"); } }
在<mvc:mapping path="/emps"/>中可以配置攔截的url地址。
在<mvc:exclude-mapping path=""/>中可以配置不攔截的url地址。
像這種定義在<mvc:interceptors>下的<bean class="com.gong.springmvc.interceptors.FirstInterceptor"></bean>,沒有指定是否攔截,則默認所有請求都調用該攔截器。
在<mvc:interceptor>下使用<mvc:mapping path="/emps"/>表明要攔截該地址,調用的攔截器是SecondInterceptor。
比如說,我們如果請求地址是/emps,那么兩個攔截器都會被調用,在控制台可以看到:
如果請求地址不是/emps,那么只會調用FirstInterceptor攔截器: