Spring框架——拦截器(SpringMVC)
拦截器
介绍
Spring的Handler映射机制包含了Handler拦截器
使用handler拦截器,可以在某些
- 请求应用特殊的功能
- 检查权限
- 防止表单重复提交
必须实现HandlerInterceptor
接口
xml文件配置
拦截器的配置
<!-- 基于注解驱动的SpringMVC -->
<mvc:annotation-driven />
<mvc:interceptors>
<mvc:interceptor>
<!-- 过滤所有的Controller -->
<mvc:mapping path="/**"/>
<!-- 不过滤的Controller -->
<mvc:exclude-mapping path="/user/login"/>
<bean class="com.myschool.user.LoginTimeInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
Java文件
- 继承
HandlerInterceptorAdapter
- 重写方法
preHandler
- 重写方法
postHandler
- 重写方法
afterCompletion(..)
public class LoginTimeInterceptor extends HandlerInterceptorAdapter {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion");
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle");
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
System.out.println("preHandle");
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
if (8 <= hour && hour < 17) {
return true;
}else{
response.sendRedirect("index.jsp");
return false;
}
// return true;
}
}
-
preHandler 在handler执行前调用
-
postHandler 在handler执行后调用
-
afterCompletion(..) 在整个请求完成后调用
Controller文件
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/login")
public void login(){
}
@RequestMapping("/list")
public void list(){
System.out.println("list");
}
}