• SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】


          注意:此文章是个人原创。希望有转载须要的朋友们标明文章出处。假设各位朋友们认为写的还好,就给个赞哈。你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linuszhu@163.com,敬请朋友们斧正,谢谢。

          这部分主要解说SpringMVC的拦截器的部分。会带着大家完毕定义拦截器的两种方式的实例。不多说了。開始……

          SpringMVC的拦截器主要是用于拦截用户的请求,而且进行对应的处理,如:权限验证、推断登录等。

    定义拦截器的两种方式,例如以下:

    1. 实现接口:

    org.springframework.web.servlet.HandlerInterceptor

    接口中有例如以下方法须要重写:

    注意:參数中的Object handler是下一个拦截器。

    a) public boolean preHandle
    (HttpServletRequest request,HttpServletResponse response, 
    Object handler) throws Exception

    该方法在action运行前运行,能够实现对数据的预处理,比方:编码、安全控制等。

    假设方法返回true,则继续运行action

    b) public void postHandle
    (HttpServletRequest request,HttpServletResponse response, 
    Object handler,ModelAndView modelAndView) throws Exception

    该方法在action运行后,生成视图前运行。

    在这里,我们有机会改动视图层数据。

    c) public void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception

    最后运行,通经常使用于释放资源,处理异常。我们能够依据ex是否为空。来进行相关的异常处理。由于我们在平时处理异常时。都是从底层向上抛出异常,最后到了spring框架从而到了这种方法中。

    2. 继承适配器类:

    org.springframework.web.servlet.handler.HandlerInterceptorAdapter

    这个适配器实现了HandlerInterceptor接口。提供了这个接口中全部方法的空实现。

    以下是我定义的两中实现拦截器的演示样例代码,仅供大家參考:

    //方式1

    package interceptor;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.springframework.web.servlet.HandlerInterceptor;

    import org.springframework.web.servlet.ModelAndView;

    public class MyInterceptor implements HandlerInterceptor {

    @Override

    public void afterCompletion(HttpServletRequest request,

    HttpServletResponse response, Object handler, Exception ex)

    throws Exception {

    System.out.println("zxs-最后运行!

    !!一般用于释放资源!!");

    }

    @Override

    public void postHandle(HttpServletRequest request,

    HttpServletResponse response, Object handler,

    ModelAndView modelAndView) throws Exception {

    System.out.println("zxs-Action运行之后。生成视图之前运行。!

    ");

    }

    @Override

    public boolean preHandle(HttpServletRequest request,

    HttpServletResponse response, Object handler) throws Exception {

    System.out.println("zxs-action之前运行。!

    ");

    return true; // 继续运行action

    }

    }

    //方式2

    package interceptor;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

    public class MyInterceptor2 extends HandlerInterceptorAdapter {

    @Override

    public boolean preHandle(HttpServletRequest request,

    HttpServletResponse response, Object handler) throws Exception {

    System.out.println("MyInterceptor2.preHandle()");

    return true; // 继续运行action

    }

    }

    3. springmvc-servlet.xml中怎样加入例如以下配置,使用拦截器:

    <mvc:interceptors>

    <!-- 拦截器1会拦截全部.do请求 -->

    <bean class="interceptor.MyInterceptor"></bean>

    <!-- 拦截器2会拦截user.do请求 -->

    <mvc:interceptor>

        <mvc:mapping path="/user.do" />

    <bean class="interceptor.MyInterceptor2"></bean>

    </mvc:interceptor>

    </mvc:interceptors>

  • 相关阅读:
    转:testlink 环境搭建(傻瓜版)
    转最简便安装python+selenium-webdriver环境方法
    转发 python中file和open有什么区别
    一面cvte
    org.apache.hadoop.security.AccessControlException: Permission denied:
    让hadoop-0.20.2自带的eclipse插件支持eclipse-3.5以上
    在VMWare中建立Hadoop虚拟集群的详细步骤(使用CentOS)
    第一天
    执行insmod提示invalidmodule format
    Linux Kernel中函数命名
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5362191.html
Copyright © 2020-2023  润新知