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

SpringMVC拦截器

分析


实现

1.后端controller

package com.czy.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/user")
public class UserController {
    @RequestMapping("/testInterceptor")
    public String testInterceptor(){
        System.out.println("testInterceptor执行了...");
        return "success";
    }
}

2.编写拦截器类(实现handlerinterceptor接口)

拦截器1

package com.czy.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 MyInterceptor1 implements handlerinterceptor {

    /**
     * 预处理,controller方法执行前
     * return true 放行,执行下一个拦截器,如果没有,执行controller中的方法
     * return false 不放行,无法执行controller
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行了...前111");
        /*request.getRequestdispatcher("/WEB-INF/pages/error.jsp").forward(request,response);*/
        return true;
    }

    /**
     * 后处理的方法,controller方法执行后,success.jsp执行前
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器执行了...后111");
        //跳转后success.jsp页面与afterCompletion也会执行,但我们只会看到跳转页面
        /*出错了也可进行页面跳转:request.getRequestdispatcher("/WEB-INF/pages/error.jsp").forward(request,response);*/
    }

    /**
     * success.jsp执行后,该方法会执行,此方法不能跳转页面
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器执行了...最后111");
    }
}

拦截器2

package com.czy.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 MyInterceptor2 implements handlerinterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行了...前222");
        return true;
    }


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器执行了...后222");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器执行了...最后222");
    }
}

3.配置拦截

  <!--配置拦截器-->
    <mvc:interceptors>
        <!--配置多个拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/user/*"/> <!--拦截的具体方法-->
            <!--<mvc:exclude-mapping path=""/>--> <!--不拦截方法-->
            <bean class="com.czy.interceptor.MyInterceptor1"></bean> <!--配置拦截器对象-->
        </mvc:interceptor>
        
        <!--配置第二个拦截器-->
        <mvc:interceptor>
            <mvc:mapping path="/**"/>
            <bean class="com.czy.interceptor.MyInterceptor2"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

结果

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

相关推荐