spring mvc 拦截器:拦截器是指通过统一拦截从浏览器发往服务器的请求来完成功能的增强。使用场景:解决请求的共性问题(如:乱码问题, 权限验证问题等)。
过滤器所在位置:
spring-web-4.0.2.RELEASE.jar -> org.springframework.web.filter -> CharacterEncodingFilter.class
SpringMVC 可以通过配置过滤器来解决乱码问题
拦截器的工作原理和过滤器非常相似。
在 web.xml 配置过滤器,就如同高速路上的收费站所有的车辆都要进过检查!
拦截器的实现
- encoding org.springframework.web.filter.CharacterEncodingFilter true encoding UTF-8 encoding *
编写拦截器类实现 HandlerInterceptor 接口 将拦截器注册进 SpringMVC 框架中 配置拦截器的拦截规则(比如拦截部分请求,可以使用正则表达式)
在第二步在 springMVC 的配置文件中
拦截器的方法介绍preHandle 方法,在请求被处理之前进行调用 postHandle 方法,在请求被处理之后进行调用 afterCompletion 方法,在请求结束之后才进行调用
preHandle 方法的返回值表示我们是否需要将当前的请求拦截下来。
如果返回 false,请求将被终止
如果返回 true,请求将会继续运行
其中参数 handler 表示的是被拦截的请求的目标对象
- boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception;
可以通过参数 ModelAndView 参数改变显示的视图,或者修改发往视图的方法。例如:modlelAndView.addObject("msg","这是传回的被修改后的消息");
modelAndView.setViewName("/hello2.jsp"); 修改跳转的页面。
- void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception;
可以作为结束后的资源销毁,关闭流等等
- void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception;
拦截器的其他实现方式
拦截器的类还可以通过实现 WebRequestInterceptor 接口来编写向 SpringMVC 框架注册的写法不变
弊端:preHandle 方法没有返回值,不能终止请求
注意多个拦截器的执行顺序
适用场景
适用原则:处理所有请求的共同问题
1. 解决乱码问题
2. 解决权限验证问题
- boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
- request.setCharacterEncoding("utf-8");
- System.out.println("执行到了preHandle方法"); //对用户是否登录进行判断 if(request.getSession().getAttribute("user") == null) { //如果用户没有登录,就终止请求,并发送到登录页面 request.getRequestDispatcher("/login.jsp").forward(request, response); return false; }}
就爱阅读 www.92to.com 网友整理上传, 为您提供最全的知识大全, 期待您的分享,转载请注明出处。
来源: