SpringMVC拦截器的使用(入门)

拦截器简介

Spring Web MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

拦截器执行流程

入门案例

使用拦截器需要实现HandlerInterceptor接口,它有三个方法

preHandler:预处理方法,返回值true表示继续执行,false表示流程中断

postHandler:后处理方法

afterCompletion:请求处理完毕后执行的回调方法

//拦截器
public class FirstInterceptor implements HandlerInterceptor {
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("first preHandler");
        return true;
    }

    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("first postHandler");
    }

    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("first afterCompletion");
    }
}

  

处理器代码

@Controller
public class FirstController {
    
    @RequestMapping("/first")
    public String doFirst(){
        System.out.println("doFirst");
        return "index";
    }
}

  

配置Springxml文件

  <!--:参数方法名解析器-->
   <bean id="methodNameResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="prefix" value="/"/>
       <property name="suffix" value=".jsp"/>
   </bean>
    <!--扫描包下所有的被标注的类-->
    <context:component-scan base-package="day17Interceptor"/>

   <!--配置拦截器-->
    <mvc:interceptors>
        <!--配置第一个拦截器-->
        <mvc:interceptor>
            <!--拦截所有请求-->
            <mvc:mapping path="/**"/>
            <!--配置自定义拦截器-->
            <bean class="day17Interceptor.FirstInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

    <!--配置注解驱动-->
    <mvc:annotation-driven/>

  

访问:http://localhost:8080/first

结果:

如果需要定义多个拦截器就需要在<mvc:Interceptors>节点中在添加一个<mvc:Interceptor>子节点,例如

<!--配置拦截器-->
    <mvc:interceptors>
        <!--配置第一个拦截器-->
        <mvc:interceptor>
            <!--拦截所有请求-->
            <mvc:mapping path="/**"/>
            <!--配置自定义拦截器-->
            <bean class="day17Interceptor.FirstInterceptor"/>
        </mvc:interceptor>

        <!--配置第二个拦截器-->
        <mvc:interceptor>
            <!--拦截所有请求-->
            <mvc:mapping path="/**"/>
            <!--配置自定义拦截器-->
            <bean class="day17Interceptor.SecondInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

  

原文地址:https://www.cnblogs.com/xuchangqi1/p/8694589.html