码迷,mamicode.com
首页 > 其他好文 > 详细

用程序拦截器拦截请求

时间:2016-09-21 10:15:45      阅读:124      评论:0      收藏:0      [点我收藏+]

标签:

Servlet API可以在每个Web请求得到servlet处理的前后,进行预处理和后处理。

有时候希望预先和事后处理Spring MVC处理的请求,在方法返回的模式属性传递视图之前操纵它们。

(这两种有什么不同呢)

Spring MVC允许使用程序拦截器(Handler inteceptors)拦截Web请求进行预先和事后处理。

可以为特定的URL映射注册处理程序拦截器,这样就只拦截映射到某些URL的请求。

技术分享

技术分享

每个拦截器都要实现HandlerInterceptor接口,有三个回调方法供实现。

preHandler()在处理程序处理请求之前调用

postHandler()在处理程序处理请求之后调用

afterCompletion()在所有的请求处理完之后(也就是在视图显示之后)调用

 

public class 方法1 implements HandlerInterceptor {

public boolean preHandle (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

方法返回true,允许DispatcherServlet继续请求处理

否则DispatcherServlet认为这个方法已经处理了请求,于是将响应直接发送给用户

 

}

 

public void postHandler(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modeAndView) throws Exception {

 

}

 

public void afterCompletion (HttpServletRequest request, HttpServletResponse, Object handler, Exception ex) throws Exception {

 

}

 

}

实现一个接口即使不需要全部的方法,也必须实现它们。

更好的方式是用扩展拦截器适配器类代替,这个类默认实现所有的拦截器方法,你可以只覆盖需要的方法。

 

public class 自己的拦截器1 extends HandlerInterceptorAdapter {

 

public boolean preHandler (HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

 

}

 

public void postHandler (HttpServeletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

 

 

}

 

 

}

 

 

请求属性?

处理程序拦截器注册到DefaultAnnotationHandlerMapping bean,这个Bean负责将拦截器应用到所有以@Controller注解的类。你可以在数组类型的interceptors属性中指定多个拦截器。

 

 

使用DefaultAnnotationHandlerMapping有一个特殊的确定,拦截器会分配给每个用@Controller注解定义的类,如果你有几对拦截器,希望区分拦截器所对应的控制器。

 

为此需要自己定义处理程序拦截器。

Scott Murphy的spring-plugins允许使用URL在控制器的基础上应用拦截器。

根据URL来将拦截器应用到不同的控制器上。

用程序拦截器拦截请求

标签:

原文地址:http://www.cnblogs.com/tuhooo/p/5891600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!