zoukankan      html  css  js  c++  java
  • Spring 拦截器配置

    Spring interceptor拦截器配置

    Spring mvc的拦截器是通过handlerinterceptor来实现的

    实现方式:

      1.自定义一个类实现Spring的handlerinterceptor接口或者实现handlerinterceptor接口的类,比如Spring已经提供了实现的handlerinterceptorAdapter

      2.实现Spring的WebRequestinterceptor接口 或者继承已经实现webRequestinterceptor类

    (一)实现handlerinterceptor接口

        handlerninterceptor接口定义了三个方法进行拦截处理

      (1)prehandle() 返回值类型是boolean 

          这里可以做session失效处理或其他数据准备。

          返回false表示请求结束 也不会执行后面的interceptor和controller

          返回true执行下一个interceptor

       (2)posthandle()在controller之后执行在渲染视图之前调用

       (3)aftercompletion()渲染视图后执行行,该方法需要当前对应的prehandle()的返回值为true才能执行,作用是用于清理工作的

    执行的顺序是:比如两个interceptor

      prehandle1-->prehandle2-->posthandle2-->posthandle1-->aftercompletion1-->aftercompletion2

    xml配置文件

    <mvc:interceptors>
    <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->
    <mvc:interceptor>
    <mvc:mapping path="/login/account"/>
    <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->
    <bean class="cn.springmvc.interceptors.LoginInterceptor"/>
    </mvc:interceptor>
    <mvc:interceptor>
    <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 -->
    <mvc:mapping path="/quit/account"/>
    <bean class="cn.springmvc.interceptors.QuitInterceptor"/>
    </mvc:interceptor>
    <!-- 使用bean定义一个Interceptor,直接定义在mvc:interceptors根下面的Interceptor将拦截所有的请求 -->
    <bean class="cn.springmvc.interceptors.AllInterceptor"/>
    </mvc:interceptors>

    java文件

    package cn.springmvc.interceptors;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;

    import cn.springmvc.model.User;
    /**
    * 用户拦截器(Spring MVC)
    * @ClassName: AcountInterceptor
    * @Description: TODO
    * @author 
    * @date 2016年5月11日 上午10:34:51
    *
    */
    public class AllInterceptor implements HandlerInterceptor{

    @Override
    public boolean preHandle(HttpServletRequest request,
    HttpServletResponse response, Object handler) throws Exception {
    System.out.println("拦截Spring MVC所有的请求");
    User user =(User) request.getSession().getAttribute("user");
    if(user==null){
    //用户没有登录

    response.sendRedirect(request.getContextPath()+"/failure.jsp");

    return false;
    }
    return true;
    }

    @Override
    public void postHandle(HttpServletRequest request,
    HttpServletResponse response, Object handler,
    ModelAndView modelAndView) throws Exception {
    // TODO Auto-generated method stub

    }

    @Override
    public void afterCompletion(HttpServletRequest request,
    HttpServletResponse response, Object handler, Exception ex)
    throws Exception {
    // TODO Auto-generated method stub

    }

    }

  • 相关阅读:
    js的构造函数和原型
    js之window
    js之字符串需要应用正则表达式的方法
    javascript学习心得之字符串
    javascript学习心得之数组
    WPF_MahApps.Metro界面主题使用
    QT控件----tableWidget的常规使用
    C#欢迎画面显示程序启动进度条,并自动打开主界面
    基于VS的QT第一个桌面程序(UI与后端绑定)
    基于QT第一个桌面程序(图标及背景等资源设置)
  • 原文地址:https://www.cnblogs.com/Seeasunnyday/p/5482273.html
Copyright © 2011-2022 走看看