springboot如何配置Filter过滤器

 更新时间:2023年12月11日 14:25:02   作者:小布的世界  
这篇文章主要介绍了springboot如何配置Filter过滤器问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

springboot配置Filter过滤器

Filter 过滤器是web开发中很重要的一个组件,下面以一个session登陆的例子介绍下spring boot中如何使用Filter

首先要准备一个实现了Filter的接口的类

SessionFilter:

import org.slf4j.LoggerFactory;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Created by mazhenhua on 2016/12/27.
 *
 * 过滤器
 */
public class SessionFilter implements Filter {
    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SessionFilter.class);


    /**
     * 封装,不需要过滤的list列表
     */
    protected static List<Pattern> patterns = new ArrayList<Pattern>();

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
        logger.info("aaaaaaaaaa");
        String url = httpRequest.getRequestURI().substring(httpRequest.getContextPath().length());
        if (url.startsWith("/") && url.length() > 1) {
            url = url.substring(1);
        }

        if (isInclude(url)){
            chain.doFilter(httpRequest, httpResponse);
            return;
        } else {
            HttpSession session = httpRequest.getSession();
            if (session.getAttribute("") != null){
                // session存在
                chain.doFilter(httpRequest, httpResponse);
                return;
            } else {
                // session不存在 准备跳转失败
                /* RequestDispatcher dispatcher = request.getRequestDispatcher(path);
                    dispatcher.forward(request, response);*/
                chain.doFilter(httpRequest, httpResponse);
                return;
            }
        }


    }

    @Override
    public void destroy() {

    }


    /**
     * 是否需要过滤
     * @param url
     * @return
     */
    private boolean isInclude(String url) {
        for (Pattern pattern : patterns) {
            Matcher matcher = pattern.matcher(url);
            if (matcher.matches()) {
                return true;
            }
        }
        return false;
    }

}

实际开发中往往有很多请求要直接请求进来

不需要鉴权登陆的,所以代码中过滤掉这种请求的代码,装进list就好了。

    /**
     * 配置过滤器
     * @return
     */
    @Bean
    public FilterRegistrationBean someFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(sessionFilter());
        registration.addUrlPatterns("/*");
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("sessionFilter");
        return registration;
    }

    /**
     * 创建一个bean
     * @return
     */
    @Bean(name = "sessionFilter")
    public Filter sessionFilter() {
        return new SessionFilter();
    }

经过上面这俩步的配置,过滤器基本上就可以了。

配置多个filter,并指定顺序,请参考: spring boot filter 配置多个时,执行顺序

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • spring 自定义让@Value被解析到

    spring 自定义让@Value被解析到

    这篇文章主要介绍了spring 自定义让@Value被解析到,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • SpringBoot 实现流控的操作方法

    SpringBoot 实现流控的操作方法

    本文介绍了限流算法的基本概念和常见的限流算法,包括计数器算法、漏桶算法和令牌桶算法,还介绍了如何在Spring Boot中使用Guava库和自定义注解以及AOP实现接口限流功能,感兴趣的朋友一起看看吧
    2024-12-12
  • SpringBoot配置文件加载方法详细讲解

    SpringBoot配置文件加载方法详细讲解

    springboot默认读取的配置文件名字是:“application.properties”和“application.yml”,默认读取四个位置的文件:根目录下、根目录的config目录下、classpath目录下、classpath目录里的config目录下
    2022-10-10
  • 详解Struts2动态方法调用

    详解Struts2动态方法调用

    这篇文章主要介绍了详解Struts2动态方法调用,涉及调用方法的代码,具有一定参考价值,需要的朋友可以了解下。
    2017-09-09
  • SpringBoot整合Spring Security实现基础认证与授权

    SpringBoot整合Spring Security实现基础认证与授权

    在后端开发领域,认证(Authentication) 和授权(Authorization) 是系统安全的核心基石,Spring Security 作为 Spring 生态官方推荐的安全框架,是Java 后端安全开发的首选方案,本文给大家介绍了SpringBoot整合Spring Security实现基础认证与授权
    2026-04-04
  • 详解Java的日期时间新特性

    详解Java的日期时间新特性

    随着时间的不断推移,现实的需求也在不断更新,原先的一些API已经难以满足开发需求了,从JDK 8之后,为了满足更多的开发需求,Java给我们增加了不少关于日期时间的新特性,接下来就带各位来看看这些新特性有哪些,需要的朋友可以参考下
    2023-06-06
  • Java实现给PDF文件增加背景图的操作指南

    Java实现给PDF文件增加背景图的操作指南

    本文介绍了如何在Java中生成PDF文件并为其添加背景图,通过两种不同的方式实现:一种使用了iText库,另一种使用了PdfBox库,这两种方法都可以实现将背景图片添加到PDF文件中,并且可以根据项目需求选择合适的方法,需要的朋友可以参考下
    2025-11-11
  • 如何为 Spring Boot 项目配置 Logback 日志

    如何为 Spring Boot 项目配置 Logback 日志

    由于 Spring Boot 的默认日志框架选用的 Logback,再加上 Log4j2 之前爆过严重的漏洞,所以我们这次就只关注 Logback,本文重点给大家介绍如何为 Spring Boot 项目配置 Logback 日志,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • 解决因缺少Log4j依赖导致应用启动失败的问题

    解决因缺少Log4j依赖导致应用启动失败的问题

    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。但这篇文章不是介绍Log4j,这篇文章主要介绍了关于因缺少Log4j依赖导致应用启动失败问题的相关资料,需要的朋友可以参考下。
    2017-04-04
  • SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)

    SpringBoot+SpringCache实现两级缓存(Redis+Caffeine)

    这篇文章主要介绍了SpringBoot+SpringCache实现两级缓存(Redis+Caffeine),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论