1. 程式人生 > >springBoot實現攔截器的幾種方式

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");

    }
}