用程序拦截器拦截请求

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

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

(这两种有什么不同呢)

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

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

“Spring Handler Interceptors”的图片搜索结果

“Spring Handler Interceptors”的图片搜索结果

每个拦截器都要实现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来将拦截器应用到不同的控制器上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值