SpringBoot - 拦截器和过滤器使用方法

创建一个 SpringBoot 项目 选择 Spring Initializr,选择 Spring Web Starter, 项目名称如下: com.ex

创建一个 SpringBoot 项目

选择 Spring Initializr,选择 Spring Web Starter, 项目名称如下: com.example.demo

编写拦截器

创建 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 {

    }
}

注册拦截器

创建 config 文件夹, 在 InterceptorConfig 中写入以下代码

@Configuration
public class InterceptorConfig implements WebMvcConfigurer{
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册拦截器
        InterceptorRegistration ir = registry.addInterceptor(new MyInterceptor());
        // 添加拦截请求
        ir.addPathPatterns("/*");
        // 添加不拦截的请求
        ir.excludePathPatterns("/login");

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

编写 Controller

创建 controller 文件夹,在 LoginController 中写入以下代码

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

    @GetMapping("/add")
    public String add(){
        return "add";
    }
}
创建过滤器

创建 filter 文件夹,在 MyFilter 中写入以下代码

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

// 自定义过滤器

// 以下为 JavaEE 的注解,需要额外配置,以便 SpringBoot 对其进行扫描
@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

// 会扫描 servlet 相关的注解
@ServletComponentScan(basePackages = "com.example.demo.filter")
public class DemoApplication {

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

}

方法二

在 config 文件夹中创建 FilterConfig 文件,加入以下内容

@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean myFilterRegistration(){
        FilterRegistrationBean regist = new FilterRegistrationBean(new MyFilter());
        // 过滤全部请求
        regist.addUrlPatterns("/*");
        return regist;
    }
}
将 DemoApplication 中的以下内容注释掉即可

// 会扫描 servlet 相关的注解
//@ServletComponentScan(basePackages = "com.example.demo.filter")


发表评论

登录 后才能评论