創(chuàng)建一個(gè) SpringBoot 項(xiàng)目

選擇 Spring Initializr,選擇 Spring Web Starter, 項(xiàng)目名稱如下: com.example.demo

編寫攔截器

創(chuàng)建 interceptor 文件夾,在 MyInterceptor 中寫入以下代碼


public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("我的攔截器");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

注冊(cè)攔截器

創(chuàng)建 config 文件夾, 在 InterceptorConfig 中寫入以下代碼

@Configuration
public class InterceptorConfig implements WebMvcConfigurer{
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注冊(cè)攔截器
        InterceptorRegistration ir = registry.addInterceptor(new MyInterceptor());
        // 添加攔截請(qǐng)求
        ir.addPathPatterns("/*");
        // 添加不攔截的請(qǐng)求
        ir.excludePathPatterns("/login");

        // 以上三句代碼可以使用下面的代替
        // registry.addInterceptor(new MyInterceptor()).addPathPatterns("/*").excludePathPatterns("/login");
    }
}

編寫 Controller

創(chuàng)建 controller 文件夾,在 LoginController 中寫入以下代碼

@RestController
public class LoginController {
    @GetMapping("/login")
    public String Login(){
        return "login";
    }

    @GetMapping("/add")
    public String add(){
        return "add";
    }
}
創(chuàng)建過濾器

創(chuàng)建 filter 文件夾,在 MyFilter 中寫入以下代碼

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

// 自定義過濾器

// 以下為 JavaEE 的注解,需要額外配置,以便 SpringBoot 對(duì)其進(jìn)行掃描
@WebFilter(urlPatterns = "/*")
public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("我的過濾器");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

方法一

在 DemoApplication 中,加入以下注解

@SpringBootApplication

// 會(huì)掃描 servlet 相關(guān)的注解
@ServletComponentScan(basePackages = "com.example.demo.filter")
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

方法二

在 config 文件夾中創(chuàng)建 FilterConfig 文件,加入以下內(nèi)容

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean myFilterRegistration(){
        FilterRegistrationBean regist = new FilterRegistrationBean(new MyFilter());
        // 過濾全部請(qǐng)求
        regist.addUrlPatterns("/*");
        return regist;
    }
}
將 DemoApplication 中的以下內(nèi)容注釋掉即可

// 會(huì)掃描 servlet 相關(guān)的注解
//@ServletComponentScan(basePackages = "com.example.demo.filter")