侧边栏壁纸
博主头像
hanlibaby博主等级

念念不忘,必有回响

  • 累计撰写 59 篇文章
  • 累计创建 92 个标签
  • 累计收到 20 条评论

SpringBoot-自定义Filter

hanlibaby
2022-02-22 / 0 评论 / 0 点赞 / 450 阅读 / 1,724 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-02-22,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

实习第6天,学习自定义Filter

前言

Filter 在我们日常开发中是经常要被使用到的,我们经常使用它来记录调用日志、预防XSS攻击,对请求信息进行检查、执行权限验证等。

实现步骤

  1. 实现 Filter 接口,重写其 doFilter 方法。
  2. 在标有 @Configuration 注解的配置类中,将自定义 Filter 加入过滤器链。

代码实现

1、自定义 Filter

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

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

public class MyFilter implements Filter {
    private static final Logger logger = LoggerFactory.getLogger(MyFilter.class);

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        logger.info("MyFilter executed,url:{}", request.getRequestURI());
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

2、加入过滤器链

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

@Configuration
public class WebConfiguration {

    @Bean
    public FilterRegistrationBean<MyFilter> registerFilter() {
        FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new MyFilter());
        registrationBean.addUrlPatterns("/filter/*");
        registrationBean.setName("MyFilter");
        registrationBean.setOrder(1);
        return registrationBean;
    }
}

3、测试

新建一个 Controller

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("filter")
public class FilterTestController {

    @RequestMapping("test")
    public String test() {
        return "filter test!";
    }
}

启动应用,访问 http://localhost:8080/filter/test,可看到控制台打印信息。

image.png

0

评论区