SpringMVC可以通过拦截器拦截你所需要拦截的request请求,
拦截器也是属于handler mapping的一种机制, 而且拦截器必须实现org.springframework.web.servlet包的HandlerInterceptor接口, 但是为了方便使用, 一般继承HandlerInterceptor的适配器(HandlerInterceptorAdapter)就可以了;
拦截器
下面是一个简单的拦截器的例子(是Spring官方例子小修改而成的):
package com.wenj.interceptors;
import java.util.Calendar;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class WorkTimeInterceptor extends HandlerInterceptorAdapter {
private int openingTime;
private int closingTime;
public void setOpeningTime(int openingTime) {
this.openingTime = openingTime;
}
public void setClosingTime(int closingTime) {
this.closingTime = closingTime;
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
Calendar cl = Calendar.getInstance();
int hour = cl.get(Calendar.HOUR_OF_DAY);
if(hour<openingTime || hour>=closingTime){
response.sendRedirect("http://www.baidu.com");
return false;
}
return true;
}
}
以上例子很简单, 主要是实现工作时间的控制, 只有在工作时间(8~18点)才能进行操作
拦截器配置
xml配置如下:
<!-- 配置mvc注解解析器 -->
<mvc:default-servlet-handler />
<mvc:annotation-driven />
<!-- 配置自动扫描controller注解 -->
<context:component-scan base-package="com.wenj.controller" />
<bean id="workTimeInterceptor" class="com.wenj.interceptors.WorkTimeInterceptor">
<property name="openingTime" value="8" />
<property name="closingTime" value="18" />
</bean>
<mvc:interceptors>
<ref bean="workTimeInterceptor"/>
</mvc:interceptors>
<!-- 配置视图 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
这样一个简单的拦截器就实现了, 在非工作时间内访问网站时会直接跳转到百度这个网站, 并且终止当前的请求执行链