微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringMVC拦截器

文章目录

1SpringMVC拦截

1.1拦截器的作用

SpringMVC的拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理
拦截器按一定的顺序联结成一条链,这条链成为拦截器链。在访问被拦截方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用拦截器也是AOP思想的具体体现

1.2拦截器和过滤器的区别

区别过滤器拦截
使用范围是Servlet规范中的一部分,任何Javaweb工程都可以使用是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
拦截范围在url-pattern中配置了/*之后,可以对所有要访问的资源拦截只会拦截访问的控制器方法,如果访问的是jsp,html,css,image或者是js都不会被拦截

1.3拦截快速入门

自定义拦截器很简单,只需要如下三步

  1. 创建拦截器类实现handlerinterceptor接口
  2. 配置拦截
  3. 测试拦截器的拦截效果
    创建拦截器类实现handlerinterceptor接口
package com.blb.Interceptor;

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

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

public class Myintercep implements handlerinterceptor {
    //目标方法执行之前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String pass = request.getP@R_404_6460@meter("pass");
        System.out.println("pre");
        //判断是否符合条件进行拦截
        if("yes".equals(pass))
         return true ;
        response.sendRedirect("error.jsp");
        return false;//返回true放行 返回false不放行
    }
   //目标方法执行之后,视图对象返回之前执行
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("post");
    }
     //在流程都执行完之后执行
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("after");
    }
}

配置拦截

  <!--配置拦截器 -->
  <mvc:interceptors>
    <mvc:interceptor>
      <!-- 对哪些资源进行拦截操作 -->
      <mvc:mapping path="/**"/>
      <!-- 配置对哪些资源不进行拦截-->
      <mvc:exclude-mapping path="/"/>
      <bean class="com.blb.Interceptor.Myintercep"></bean>
    </mvc:interceptor>
  </mvc:interceptors>

1.4拦截方法说明

方法说明
preHandler()方法在请求处理之前调用,该方法的返回值时Boolean类型的,当他返回false时,表示请求结束后续的intercept和Controller都不会在执行;当返回值为true时就会继续调用一个Intercept和PerHandle方法
postHandle()方法是在请求处理之后被调用,前提是preHandle方法返回的值为true时才能被调用,且他会在dispatcherServlet进行视图返回渲染之前被、调用,所以我们可以在这方法中对Controller处理之后的ModelAndView对象进行操作
afterCompletion()方法将在整个请求之后,也就是在dispatcherServlet渲染了对应的视图之后执行,前提是preHandler方法的返回值为true时才能被调用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐