====================
Spring MVC拦截器使用
====================
1 修改响应页
/src/main/webapp/getBookSuccess.jsp:
...
获取图书(${id})成功
...
2 创建拦截器
/src/main/java/cn/tedu/springfile/utils/GetBookInterceptor.java:
public class GetBookInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("拦截器> 预处理");
Enumeration keys = request.getParameterNames();
while (keys.hasMoreElements()) {
String key = keys.nextElement();
if (key.equals("id") &&
Integer.parseInt(request.getParameter(key)) > 0)
return true; // 放行
}
response.sendError(400);
return false; // 阻挡
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("拦截器> 后处理");
modelAndView.addObject("id", request.getParameter("id"));
}
}
3 配置拦截器
/src/main/resources/spring-servlet.xml:
...
...
在“获取一本图书”页面:
- 输入0或负标识,得到400错误。
- 输入正确标识,响应页面中包含该标识。
例程:SpringFile
4 拦截多个方法
一个拦截器可以拦截多个控制器方法:
- 拦截多个方法
- 拦截所有方法
- 拦截除个别方法外的所有方法
5 拦截器链
/src/main/java/cn/tedu/springfile/utils/PreGetBookInterceptor.java:
public class PreGetBookInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("前拦截> 预处理");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("前拦截> 后处理");
}
}
/src/main/java/cn/tedu/springfile/utils/PostGetBookInterceptor.java:
public class PostGetBookInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
System.out.println("后拦截> 预处理");
return true;
}
@Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("后拦截> 后处理");
}
}
/src/main/resources/spring-servlet.xml:
...
|
... |
|
按|串
前拦截> 预处理 配|连
拦截器> 预处理 置|拦
后拦截> 预处理 的|截
控制器> 获取一本图书 顺|器
后拦截> 后处理 序|链
拦截器> 后处理 |
前拦截> 后处理 |
v
______________________________________________________________________________
|PreGetBookInterceptor|GetBookInterceptor|PostGetBookInterceptor|BookController|
|---------------------|------------------|----------------------|--------------|
----> preHandle --------> preHandle --------> preHandle --------> |
| | | | getBook |
<---- postHandle <-------- postHandle <-------- postHandle <-------- |
|_____________________|__________________|______________________|______________|
例程:SpringFile