springboot add interceptors

springboot add interceptors

step:

1, annotated @Configuration custom class and implement WebMvcConfigurer interface classes, override addInterceptors () {}

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * springboot的拦截器写法
 * 1:自定义类 实现WebMvcConfigurer
 * 2:该接口中有一个api 叫做 添加拦截
 *
 */
@Configuration
public class MyMvcConfigure implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;

    @Override
    //在此方法中添加 自定义拦截器
    public void addInterceptors(InterceptorRegistry registry) {
        System.out.println("addInterceptors");
        // *代表拦截api下的1级目录  ** 代表拦截一级目录下的所有目录
        registry.addInterceptor(loginInterceptor).addPathPatterns("/api/*/**");
//        .excludePathPatterns("login");//不拦截的路径
    }
}

2, a custom interceptor classes implement HandlerInterceptor

preHandle:调用Controller某个方法之前
postHandle:Controller之后调用,视图渲染之前,若控制器Controller出现异常,则不执行此方法
afterCompletion:不管有没有异常,这个afterCompletion都会被调用,用于资源清理
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

@Component //交给spring容器管理
public class LoginInterceptor implements HandlerInterceptor {

    //执行 controller 之前 先执行 preHandle
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        return true; //true代表放行 false 代表拦截
    }

    //controller 执行后 但还未 渲染页面 就执行 postHandle
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    //所有操作执行完毕
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }
}

3, the 2 custom interceptor to step 1 was added in addInterceptors () {} method.

Interceptor Failure:

1)检查是否有注解@Configuration
2)拦截路径是否有 **  和 * 
3)拦截器最后路径一定要是 “/**”, 如果是目录的话则是 /*/

The difference between the interceptor and filter

Here Insert Picture Description

Published 68 original articles · won praise 7 · views 2506

Guess you like

Origin blog.csdn.net/Cui6023056/article/details/105022242