用法介绍
在SpringBootApplication上使用@ServletComponentScan注解后,
Servlet(控制器)、Filter(过滤器)、Listener(监听器)可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册到Spring容器中,无需其他代码。
在入口Application类上加入注解@ServletComponentScan
package com.yunya.reggie_take_out;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@Slf4j // lombok提供的注解,可以输出日志:log.info("项目启动成功...");
@SpringBootApplication
@ServletComponentScan
public class ReggieApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieApplication.class, args);
log.info("项目启动成功...");
}
}
新建Filter类,实现Filter 并且加入注解:@WebFilter(filterName = “loginCheckFilter”, urlPatterns = “/*”)
package com.yunya.reggie_take_out.filter;
import lombok.extern.slf4j.Slf4j;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 检查用户是否完成登录
*/
@Slf4j
@WebFilter(filterName = "loginCheckFilter", urlPatterns = "/*")
public class LoginCheckFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
log.info("拦截到请求:{}", request.getRequestURI()); // {} 表示占位符
filterChain.doFilter(request, response);
}
}
运行结果
之后运行代码,在浏览器地址栏输入项目网址比如:http://localhost:8080/backend/index.html,若看到控制台打印如下拦截信息,则表示Filter创建成功。