切面編程(2)

請求響應攔截器:HandlerInterceptorAdapter

一般情況下,對來自瀏覽器的請求的攔截,是利用Filter實現的,這種方式可以實現Bean預處理、後處理。 

Spring MVC的攔截器不僅可實現Filter的所有功能,還可以更精確的控制攔截精度。 

Spring爲我們提供了org.springframework.web.servlet.handler.HandlerInterceptorAdapter這個適配器,繼承此類,可以非常方便的實現自己的攔截器。

public class RequestInterceptor extends HandlerInterceptorAdapter{

	//可以進行編碼、安全控制等處理
	//該方法會在Controller的方法執行前會被調用,可以使用這個方法來中斷或者繼續執行鏈的處理,當返回true時,處理會繼續,當返回false時,則不會去執行Controller的方法。
	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
		return true;
	}
	
	//在代碼處理後會調用該方法,那麼我們就可以在render view之前往view中添加額外的model對象,或者對view的去處進行修改
	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {
		System.out.println("攔截響應"+modelAndView.getViewName());
		super.postHandle(request, response, handler, modelAndView);
	}
	
	//異常處理
	@Override
	public void afterCompletion(HttpServletRequest httpservletrequest,
			HttpServletResponse httpservletresponse, Object obj,
			Exception exception) throws Exception {
		// TODO Auto-generated method stub
		super.afterCompletion(httpservletrequest, httpservletresponse, obj, exception);
	}
}

在xml配置該攔截器

<mvc:interceptors>
    <mvc:interceptor>
	<!-- 默認所有的請求都進行攔截 -->
	<mvc:mapping path="/*" />
	<bean class="com.cn.cis.interceptor.RequestInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章