有天上飞的概念,就要有落地的实现
SpringBoot 图文系列教程技术大纲
鹿老师的Java笔记
SpringBoot 图文教程系列文章目录
过滤器是Javaweb非常基础的一个概念,属于Servlet的一部分。本文将会使用SpringBoot配置过滤器。在代码实现之前先通过一个简单的小案例解释一下什么是过滤器。
过滤器filter的概念:Servlet中提供的技术,可以过滤浏览器发出的请求,并且决定放行请求还是中断请求。
举个栗子:
本文所有的内容,将会在下面的demo上进行操作。请去Git仓库下载:https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
/**
* @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("销毁");
}
}
@WebFilter时Servlet3.0新增的注解,原先实现过滤器,需要在web.xml中进行配置,而现在通过此注解,启动启动时会自动扫描自动注册。
在SpringBoot中配置过滤器扫描只需要在启动类加入@ServletComponentScan注解即可。
你一定听过这样的一个词儿:过滤器链路,什么是过滤器链路呢?就是有多个过滤器,就像有多个路卡是一样一样的。当你有多个过滤器之后,就需要规定各个过滤器的指定顺序了。那么怎么指定过滤器的执行顺序呢?
SpringMvc中通过web.xml可以设置
在SpringBoot中可以通过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更多的用法,请持续关注本系列教程。
下面体贴的我给朋友萌还准备了一些 自测面试题和项目案例,希望你能够成热打铁,将知识夯扎实。
见面试题集锦 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
无
见码云仓库 https://gitee.com/bingqilinpeishenme/Lu-JavaNodes
本次需求:
练习文中demo