1、作用
拦截器主要作用是拦截请求病进行相应的处理。
2、定义一个拦截器
1.自定义一个实现Interceptor接口。
2.在web.xml中注册拦截器。
3、与过滤器的区别
1.拦截器是基于java反射机制的,过滤器是基于函数回调的。
2.拦截器不依赖servlet容器,过滤器依赖于servlet容器。
3.拦截器只对action起作用,过滤器几乎可以对所以请求起作用。
4.拦截器可以访问action上下文、栈里的对象,过滤器不能。
5.在action的生命周期里,拦截器可以多次调用,而过滤器只能在容器初始化时调用一次。
4、实例
/**
*
* 拦截器
* 新增修改时只能录入 数字、汉字、下划线
*
*/
public class Interceptor extends HandlerInterceptorAdapter {
private static final List<String> URLLISTS = Arrays.asList("create", "update"); // 拦截地址
private static final String REGEX = "^[\u4E00-\u9FA5A-Za-z0-9_]+$"; // 拦截正则表达式
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String url = request.getRequestURI();
for (String string : URLLISTS) {
if (url.indexOf(string) != -1) {
String json = request.getParameter("json");
Map<String, Object> jsonMap = JSONArray.parseObject(json);
if (jsonMap!=null && jsonMap.size()!=0) {
Pattern pattern = Pattern.compile(REGEX);
for (Entry<String, Object> entry : jsonMap.entrySet()) {
Matcher matcher = pattern.matcher(entry.getValue().toString());
if (!matcher.matches()) {
return false;
}
}
}
}
}
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
super.afterCompletion(request, response, handler, ex);
}
}