創(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")