Spring-boot过滤器Filter使用

2019-12-20  本文已影响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,因此通过注册配置之后,过滤器就已经可以生效了。

上一篇下一篇

猜你喜欢

热点阅读