美文网首页
Spring-boot过滤器Filter使用

Spring-boot过滤器Filter使用

作者: 阿垃垃圾君 | 来源:发表于2019-12-20 10:59 被阅读0次

1. 定义自己的过滤器

Spring-boot中的过滤器需要实现javax.servlet.Filter的接口,接口提供了三个重载方法,分别为init,doFilter,destroy,其中过滤的逻辑放在doFilter中,且必须实现这个方法。

TestFilter.java

package com.seasky.servicesitespring.filter;


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

import javax.servlet.*;
import java.io.IOException;

public class TestFilter implements Filter {
    private static final Logger logger = LogManager.getLogger();//仅用于输出日志

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        logger.info("TestFilter init");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //过滤逻辑,这里获取了发送请求的地址
        String remoteHost = servletRequest.getRemoteHost();
        logger.info("TestFilter filter: " + remoteHost);
        //这里继续下一个过滤器
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
        logger.info("TestFilter destroy");
    }
}

2.注册过滤器容器配置

根据spring-boot提供的注册组件进行过滤器注册,可新建一个注册文件FilterConfig.java用于注册自定义的过滤器

FilterConfig.java

package com.seasky.servicesitespring.config;

import com.seasky.servicesitespring.filter.MyFilter;
import com.seasky.servicesitespring.filter.TestFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//添加Configure注解用于spring-boot启动时扫描
@Configuration
public class FilterConfig {
    /**
     * 注册第三方过滤器
     * 功能与spring mvc中通过配置web.xml相同
     * 可以添加过滤器所拦截的 URL,拦截更加精准灵活
     * @return
     */
    @Bean
    public FilterRegistrationBean testFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        registration.setFilter(new TestFilter());
        // 过滤应用程序中所有资源,当前应用程序根下的所有文件包括多级子目录下的所有文件,注意这里*前有“/”
        registration.addUrlPatterns("/*");
        //可自定义初始参数
        registration.addInitParameter("paramName", "paramValue");
        registration.setName("TestFilter");
        // 过滤器顺序,数字越小约先执行
        registration.setOrder(1);
        return registration;
    }
}

由于spring-boot启动时会自动扫描并注入Configure注解下的Bean,因此通过注册配置之后,过滤器就已经可以生效了。

相关文章

  • Spring-boot过滤器Filter使用

    1. 定义自己的过滤器 Spring-boot中的过滤器需要实现javax.servlet.Filter的接口,接...

  • Spring Boot使用过滤器Filter

    Spring Boot使用过滤器Filter >> 过滤器Filter介绍Filter也称为过滤器,是处于客户端与...

  • Spring boot学习 (八) 之Interceptor(拦

    前言 上一篇我们介绍了servlet、filter(过滤器)、listener(监听器)在spring-boot中...

  • AngularJS

    过滤器 自定义过滤器: filter的定义和js中的使用. 在html中使用, filter可以连续使用多个. {...

  • Vue(2)

    过滤器Filter Vue可以自定义过滤器,可以在{{message}}和v-bind两处使用。 Filter的定...

  • springboot集成shiro跨域问题

    使用过滤器 注册过滤器 shiro自定义filter中 如果使用Printwriter ServletOutpu...

  • Spring系列之Filter and Interceptor

    一、Filter 过滤器 1. 什么是Filter 过滤器? Filter 的含义Filter 过滤器是一个对象 ...

  • Filter过滤器

    Filter的使用和经典案例 一、什么是Filter Filter也称之为过滤器。 通过Filter可以拦截所有对...

  • Python 学习笔记 064

    续前节 Python高阶函数 filter的使用 功能 过滤器 filter的使用 示例 高阶函数-sorted...

  • 16. 过滤器 filter

    AngularJS中的过滤器 filter使用,在 搜索中 使用非常广泛

网友评论

      本文标题:Spring-boot过滤器Filter使用

      本文链接:https://www.haomeiwen.com/subject/ehbbnctx.html