spring MVC之用Handler Interceptor拦截请求

来源:互联网 发布:软件安全性认识 编辑:程序博客网 时间:2024/06/02 07:57

Spring的handler mapping机制提供了handler interceptors,可以用来为特定的请求添加特定的功能,如,检测资金额等。

handler mapping的拦截器必须实现HandlerInterceptor的接口。该接口定义了三个方法:

  • preHandler() - 在实际的handler被执行前被调用
  • postHandler() - 在handler被执行后被调用
  • afterCompletion() - 当request处理完成后被调用

preHandler()方法返回一个布尔值。可以使用该方法继续或者中断执行链。当返回true,继续执行链;如果返回false,则停止后续的执行。

Interceptor使用interceptors属性进行配置,该属性为HandlerMapping类的属性。

例如:

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <beans>  
  2.     <bean id="handlerMapping"  
  3.             class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">  
  4.         <property name="interceptors">  
  5.             <list>  
  6.                 <ref bean="officeHoursInterceptor"/>  
  7.             </list>  
  8.         </property>  
  9.     </bean>  
  10.   
  11.     <bean id="officeHoursInterceptor"  
  12.             class="samples.TimeBasedAccessInterceptor">  
  13.         <property name="openingTime" value="9"/>  
  14.         <property name="closingTime" value="18"/>  
  15.     </bean>  
  16. <beans>  
[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package samples;  
  2.   
  3. public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {  
  4.   
  5.     private int openingTime;  
  6.     private int closingTime;  
  7.   
  8.     public void setOpeningTime(int openingTime) {  
  9.         this.openingTime = openingTime;  
  10.     }  
  11.   
  12.     public void setClosingTime(int closingTime) {  
  13.         this.closingTime = closingTime;  
  14.     }  
  15.   
  16.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response,  
  17.             Object handler) throws Exception {  
  18.         Calendar cal = Calendar.getInstance();  
  19.         int hour = cal.get(HOUR_OF_DAY);  
  20.         if (openingTime <= hour && hour < closingTime) {  
  21.             return true;  
  22.         }  
  23.         response.sendRedirect("http://host.com/outsideOfficeHours.html");  
  24.         return false;  
  25.     }  
  26. }  

该handler请求的任何request都会被TimeBasedAccessInterceptor所中断。

使用是配置HandlerInterceptorAdaptor类作为中断器的基类(HandlerInterceptor接口的实现类)。

0 0
原创粉丝点击