有天上飞的概念,就要有落地的实现
概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍先赞后看,养成习惯SpringBoot 图文系列教程技术大纲
鹿老师的Java笔记
SpringBoot 图文教程系列文章目录
SpringBoot图文教程1「概念+案例 思维导图」「基础篇上」SpringBoot图文教程2—日志的使用「logback」「log4j」SpringBoot图文教程3—「‘初恋’情结」集成JspSpringBoot图文教程4—SpringBoot 实现文件上传下载SpringBoot图文教程5—SpringBoot 中使用Aop前言过滤器是Javaweb非常基础的一个概念,属于Servlet的一部分。本文将会使用SpringBoot配置过滤器。在代码实现之前先通过一个简单的小案例解释一下什么是过滤器。
过滤器filter的概念:Servlet中提供的技术,可以过滤浏览器发出的请求,并且决定放行请求还是中断请求。
浏览器对服务器的请求,会先经过过滤器,再到达服务器服务器对浏览器的响应,也会先经过过滤器,最后再响应给浏览器基于过滤器的机制,我们可以在过滤器中对请求和响应做一些处理,可以在过滤器中决定是否放行,例如:校验请求中有没有敏感字符串,校验有没有Session等。举个栗子:
过滤器就像疫情期间村口的路卡,你不管进村儿还是出村儿都需要经过路卡 路卡的工作人员(过滤器)会在你经过的时候对你做一些”操作“,量量体温,问询一下,然后对你一些处理,放行或者让你原路返回。SpringBoot中过滤器的使用本文所有的内容,将会在下面的demo上进行操作。请去Git仓库下载:https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
1.创建过滤器类 /** * @WebFilter时Servlet3.0新增的注解,原先实现过滤器,需要在web.xml中进行配置,而现在通过此注解,启动启动时会自动扫描自动注册。 * * @WebFilter filterName 定义注册的过滤器的名字 * urlPatterns 定义要拦截所有的请求 * */ @WebFilter(filterName="userFilter",urlPatterns={"/*"}) public class UserFilter implements Filter { Logger logger = LoggerFactory.getLogger(UserFilter.class); @Override public void init(FilterConfig filterConfig) throws ServletException { logger.info("过滤器初始化"); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { logger.info("请求处理"); HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; // 简单的session校验 if (request.getSession().getAttribute("user")!=null) { // 请求放行 filterChain.doFilter(request, response); }else { } } @Override public void destroy() { logger.info("销毁"); } }2.SpringBoot配合过滤器扫描@WebFilter时Servlet3.0新增的注解,原先实现过滤器,需要在web.xml中进行配置,而现在通过此注解,启动启动时会自动扫描自动注册。
在SpringBoot中配置过滤器扫描只需要在启动类加入@ServletComponentScan注解即可。
3.设置多个过滤器的执行顺序你一定听过这样的一个词儿:过滤器链路,什么是过滤器链路呢?就是有多个过滤器,就像有多个路卡是一样一样的。当你有多个过滤器之后,就需要规定各个过滤器的指定顺序了。那么怎么指定过滤器的执行顺序呢?
SpringMvc中通过web.xml可以设置
在SpringBoot中可以通过FilterRegistrationBean进行过滤器的注册。
创建两个Filter类 删除@WebFilter注解即可 在启动类中通过@Bean的方式配置FilterRegistrationBean@SpringBootApplication @ServletComponentScan public class AppRun { public static void main(String[] args) { // 参数:启动类类对象 主函数形参名 SpringApplication.run(AppRun.class,args); } @Bean public FilterRegistrationBean filterRegistrationBean(UserFilter userFilter) { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(userFilter); //过滤器名称 registration.setName("userFilter"); //拦截路径 registration.addUrlPatterns("/*"); //设置顺序 registration.setOrder(10); return registration; } @Bean public FilterRegistrationBean filterRegistrationBean2(User2Filter user2Filter) { FilterRegistrationBean registration = new FilterRegistrationBean(); // 设置过滤器 registration.setFilter(user2Filter); //过滤器名称 registration.setName("user2Filter"); //拦截路径 registration.addUrlPatterns("/*"); //设置顺序 registration.setOrder(20); return registration; } @Bean public UserFilter userFilter(){ return new UserFilter(); } @Bean public User2Filter user2Filter(){ return new User2Filter(); } }注册多个时,就注册多个FilterRegistrationBean即可。启动之后的效果如下:
总结以上就是SpringBoot中过滤器的简单使用,本文为基础篇,所以关于过滤器的应用会在后续文章中写出。
让我们再次回顾本文的学习目标
掌握SpringBoot中过滤器的使用要掌握SpringBoot更多的用法,请持续关注本系列教程。
下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,希望你能够成热打铁,将知识夯扎实。
上期自测面试题答案见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
自测面试题(答案见下期)无
上期自测实现项目小案例答案见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
自测实现项目小案例(答案见下期)本次需求:
练习文中demo
---来自腾讯云社区的---鹿老师的Java笔记
微信扫一扫打赏
支付宝扫一扫打赏