springMVC 拦截器

来源:互联网 发布:济南万达mac 编辑:程序博客网 时间:2024/06/03 20:49

通过统一拦截器从浏览器到服务器的请求来完成功能的增强。比如说请求共性问题(乱码问题、权限验证问题)、登录日志、操作日志等。

1:web.xml配置:

<filter>  <description>字符集过滤器</description>  <filter-name>encodingFilter</filter-name>  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>  <init-param>    <description>字符集编码</description>    <param-name>encoding</param-name>    <param-value>UTF-8</param-value>  </init-param></filter><filter-mapping>  <filter-name>encodingFilter</filter-name>  <url-pattern>/*</url-pattern></filter-mapping>
2:拦截器实现
    编辑拦截器实现类:
package com.test;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class TestInterceptor implements HandlerInterceptor {    @Override    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {        System.out.println("进入到preHandle");        return true;    }    @Override    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {        System.out.println("进入到postHandle");    }    @Override    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {        System.out.println("进入到afterCompletion");    }}
    springmvc拦截器注入
<mvc:interceptors>    <mvc:interceptor>        <mvc:mapping path="/login.do"/><!--配置拦截器拦截何种请求 path="/**"拦截所有请求-->        <bean class="com.test.TestInterceptor"></bean>    </mvc:interceptor></mvc:interceptors>
请求login.do时首先进入拦截器perHandler中,之后进入login.do的具体请求方法中,之后进入
postHandle ---afterCompletion中
拦截器方法介绍:
perHandler方法是有boolean返回值 我们是否需要把当前的请求拦截先来 return true 请求继续,return false请求终止。perHandler中的Object参数表示具体的拦截信息,也就是login.do对应的请求方法中的对象信息。
postHandle 中ModelAndView参数,可以改变login.do中具体返回视图的信息,也可以改变视图。
afterCompletion 请求结束后,资源的关闭等用到。
多拦截器使用规则:
拦截器还可以implements webRequestInterceptor来实现
其区别在于:1:在实现webRequestInterceptor时 perHandler 无返回值,也就是无法结束请求。
  2:参数存在差异,但大同小异。
拦截器使用场景:
处理请求的一些共性问题。比如说,乱码问题、权限验证问题、session会话是否存在问题。
拦截器与过滤器的区别:
过滤器Filter依赖servlet容器,基于回调函数,过滤范围大,过滤所有请求、资源等。
拦截器Interceptor依赖框架容器,基于反射机制,只过滤请求。



0 0