eclipse中搭建springboot学习(5)---拦截器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Gr_lbxx/article/details/83143865

新建FirstInterceptor第一个拦截器

package com.example.demo1018.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 FirstInterceptor implements HandlerInterceptor{
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
            Exception exception) throws Exception {
        //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
        System.out.println("3. 整个请求结束之后被调用......FirstInterceptor......");
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
            throws Exception {
        // 请求处理之后进行调用,但是在视图被渲染之前
        System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......FirstInterceptor......");
    }
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
        // 在请求处理之前进行调用
        System.out.println("1. 在请求处理之前进行调用......FirstInterceptor......");
        // 只有返回true才会继续向下执行,返回false取消当前请求
        return true;
    }

}
 

新建SecondInterceptor第二个拦截器 

package com.example.demo1018.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 SecondInterceptor implements HandlerInterceptor{
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object,
            Exception exception) throws Exception {
        //在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
        System.out.println("3. 整个请求结束之后被调用......SecondInterceptor......");
    }
 
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView view)
            throws Exception {
        // 请求处理之后进行调用,但是在视图被渲染之前
        System.out.println("2. 请求处理之后进行调用,但是在视图被渲染之前......SecondInterceptor......");
    }
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object object) throws Exception {
        // 在请求处理之前进行调用
        System.out.println("1. 在请求处理之前进行调用......SecondInterceptor......");
        // 只有返回true才会继续向下执行,返回false取消当前请求
        return true;
    }

}
 

将拦截器组成一个拦截器链

package com.example.demo1018.interceptor;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
public class WebAdapter extends WebMvcConfigurerAdapter {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //众多的拦截器组成了一个拦截器链
        /**
         * 主要方法说明:
         * addPathPatterns 用于添加拦截规则
         * excludePathPatterns 用户排除拦截
         */
        registry.addInterceptor(new FirstInterceptor()).addPathPatterns("/*");
        //拦截器SecondInterceptor不拦截hello
        registry.addInterceptor(new SecondInterceptor()).addPathPatterns("/*").excludePathPatterns("/hello");
        super.addInterceptors(registry);
    }

}
 

猜你喜欢

转载自blog.csdn.net/Gr_lbxx/article/details/83143865