自定义拦截器
- 继承HandlerInterceptor
- xml文件里注册拦截器 <mvc:interceptors><bean class="">
- 配置拦截规则 可以正则 在<mvc:interceptor>里添加<mvc:mapping path="/xxx" />
具体方法:
- boolean preHandle() 返回值:是否需要拦截请求 false请求会被终止 Object arg2表示被拦截的请求的目标对象
- postHandle() 里面modelandview参数 可以更改c层传回视图层的数据modelandview
多个拦截器,执行顺序如下图:
实现拦截器其他方式:
继承WebRequestInterceptor 注入springmvc框架方法不变 不同点是preHandle方法没有返回值
应用:
- 解决乱码问题。arg0.setCharacterEncoding("utf-8")
- 解决权限验证问题。
if(arg0.getSession().getAttribute("user")==null){arg0.getRequestDispatcher("/login.jsp").forward(arg0,arg1); return false; }
拦截器和过滤器区别:
过滤器依赖于servlet容器,基于回调函数,过滤范围大
拦截器依赖框架容器,基于反射机制,只过滤请求