Spring的handler mapping机制提供了handler interceptors,可以用来为特定的请求添加特定的功能,如,检测资金额等。
handler mapping的拦截器必须实现HandlerInterceptor的接口。该接口定义了三个方法:
- preHandler() - 在实际的handler被执行前被调用
- postHandler() - 在handler被执行后被调用
- afterCompletion() - 当request处理完成后被调用
preHandler()方法返回一个布尔值。可以使用该方法继续或者中断执行链。当返回true,继续执行链;如果返回false,则停止后续的执行。
Interceptor使用interceptors属性进行配置,该属性为HandlerMapping类的属性。
例如:
<beans>
<bean id="handlerMapping"
class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
<property name="interceptors">
<list>
<ref bean="officeHoursInterceptor"/>
</list>
</property>
</bean>
<bean id="officeHoursInterceptor"
class="samples.TimeBasedAccessInterceptor">
<property name="openingTime" value="9"/>
<property name="closingTime" value="18"/>
</bean>
<beans>package samples;
public class TimeBasedAccessInterceptor extends HandlerInterceptorAdapter {
private int openingTime;
private int closingTime;
public void setOpeningTime(int openingTime) {
this.openingTime = openingTime;
}
public void setClosingTime(int closingTime) {
this.closingTime = closingTime;
}
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object handler) throws Exception {
Calendar cal = Calendar.getInstance();
int hour = cal.get(HOUR_OF_DAY);
if (openingTime <= hour && hour < closingTime) {
return true;
}
response.sendRedirect("http://host.com/outsideOfficeHours.html");
return false;
}
}该handler请求的任何request都会被TimeBasedAccessInterceptor所中断。
使用是配置HandlerInterceptorAdaptor类作为中断器的基类(HandlerInterceptor接口的实现类)。
本文介绍Spring框架中HandlerInterceptor的工作原理及应用案例,包括如何通过实现HandlerInterceptor接口来创建自定义拦截器,以及如何配置这些拦截器以应用于特定的HTTP请求。
860

被折叠的 条评论
为什么被折叠?



