Spring Boot 过滤器

用户头像
噜噜猫
关注
发布于: 2020 年 12 月 14 日

一。过滤器和拦截器的区别 



1 Filter 是基于函数回调doFilter(),而Interceptor是基于AOP思想



2 Filter只在Servlet前后起作用,而Interceptor能够深入到方法前后、异常跑出前后等



3 Filter依赖于Servlet容器即web应用中,而Interceptor不依赖于Servlet容器,所以可以运行在多种环境



4 在调用方法的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化的时候调用一次



二。Filter和Interceptor的执行顺序



过滤前->拦截前->action执行->拦截后->过滤后



三。实现过滤方法



@WebFilter(urlPatterns = {"/api/*"}, filterName = "loginFilter")
public class LoginFilter implements Filter {
//容器加载的时候调用
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化");
}
//请求被拦截的时候进行调用
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤中");
HttpServletRequest req = (HttpServletRequest) servletRequest;
HttpServletResponse resp = (HttpServletResponse) servletResponse;
String username = req.getParameter("key1");
if ("xiaoming".equals(username)) {
filterChain.doFilter(servletRequest, servletResponse);
} else {
resp.sendRedirect("/index.html");
return;
}
}
//容器被销毁的时候被调用
@Override
public void destroy() {
System.out.println("销毁过滤");
}
}



四。配置过滤



注册过滤器添加 @ServletComponentScan



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



总结:在SpringBootApplication上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。



获取源码:https://github.com/alindada/springboot



用户头像

噜噜猫

关注

还未添加个人签名 2020.12.13 加入

还未添加个人简介

评论

发布
暂无评论
Spring Boot 过滤器