springBoot实现拦截器的几种方式

1)拦截器实现HandlerInterceptor接口,重写三个方法:preHandle,postHandle,afterCompletion,

MySpringMVCConfig 实现 WebMvcConfigurer 重写addInterceptors方法,添加拦截路径及排除拦截路径。
import com.example.dao.User;
import com.example.util.UserContext;
import org.springframework.lang.Nullable;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

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

public class UserConfig implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        User current = UserContext.getCurrent();
        if(current == null){
            return false;
        }
        return true;
    }

     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
        System.out.println("afterHandle");
    }

}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MySpringMVCConfig implements WebMvcConfigurer {
    @Bean
    public UserConfig getUserConfig(){
        return new UserConfig();
    }


      public void addInterceptors(InterceptorRegistry registry) {
          registry.addInterceptor(getUserConfig()).addPathPatterns("/**").excludePathPatterns("/login");
    }


}

由以上代码可以实现拦截除"/login" 以外的所有"/**"方法。

2)使用AOP代理,自定注解实现拦截功能,参看另一文章。

3)使用@WebFilter注解添加拦截路径,实现Filter接口重写doFilter方法。

package com.example.config;

import org.springframework.stereotype.Component;

import javax.servlet.*;
import java.io.IOException;


@Component
@javax.servlet.annotation.WebFilter(urlPatterns = "/*",filterName = "test")
public class WebFilter implements Filter {
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("init_Method");

    }

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("doFilter");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    public void destroy() {
        System.out.println("destoryFilter");

    }
}
 
 
 

猜你喜欢

转载自blog.csdn.net/qq_39727896/article/details/85216626