springboot整合filter实现日志

一、实现过滤类Filter

@Component
@Slf4j
public class RequestUrlFilter implements Filter {

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

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //获取http信息
        HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;
        log.info("【请求路径】"+httpServletRequest.getRequestURL());
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

二、注册Filter信息

@Configuration
@ConditionalOnClass(RequestUrlFilter.class)   //当存在类RequestUrlFilter时加载
public class RequestUrlFilterAutoConfiguration  {
    
    
    /**
     * @author 袁彪
     * @description       
     * @params  实现Filter注册
     * @return org.springframework.boot.web.servlet.FilterRegistrationBean<com.yuan.config.log.RequestUrlFilter>
     * @throws
     * @date 2020/4/23 16:48
     */
    
    @ConditionalOnMissingBean(RequestUrlFilter.class) //只有容器中没有RequestUrlFilter Bean的时候才注入
    @Bean
    public FilterRegistrationBean<RequestUrlFilter> requestUrlFilter(){
        FilterRegistrationBean<RequestUrlFilter> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new RequestUrlFilter());   //自定义过滤器
        registrationBean.addUrlPatterns("/*");                //设置路径
        registrationBean.setName("requestUrlFilter");         //设置过滤器名称
        registrationBean.setOrder(1);                         //设置优先级
        return registrationBean;
    }
}

三、定义自定义注解,引用filter功能

/**
 * @author 袁彪
 * @description  日志注解
 * @date 2020/4/23 16:25
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Import(RequestUrlFilterAutoConfiguration.class) //引用过滤器功能
public @interface LogAnno {
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
过滤器是Spring Boot中的一个重要组件,可以在HTTP请求被处理之前或响应被发送回客户端之前对请求和响应进行拦截和处理,从而实现一些功能,比如IP过滤。 下面是一个简单的IP过滤器实现: 1. 创建一个名为IpFilter的类,实现javax.servlet.Filter接口: ``` @Component public class IpFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String ipAddress = req.getRemoteAddr(); // 实现IP过滤逻辑 if (!"127.0.0.1".equals(ipAddress)) { HttpServletResponse res = (HttpServletResponse) response; res.sendError(HttpServletResponse.SC_UNAUTHORIZED, "IP地址不允许访问!"); return; } chain.doFilter(request, response); } } ``` 2. 在Spring Boot应用入口类中添加注解@EnableWebMvc和@ComponentScan,以启用Spring MVC和扫描过滤器类: ``` @EnableWebMvc @ComponentScan(basePackages = "com.example.filter") @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 3. 在Spring Boot应用的配置文件中,添加过滤器的配置: ``` @Bean public FilterRegistrationBean<Filter> ipFilter() { FilterRegistrationBean<Filter> registration = new FilterRegistrationBean<>(); registration.setFilter(new IpFilter()); registration.addUrlPatterns("/*"); registration.setName("ipFilter"); registration.setOrder(1); return registration; } ``` 在以上代码中,我们创建了一个FilterRegistrationBean类型的Bean,使用setFilter方法设置要使用的过滤器类,使用addUrlPatterns方法设置要拦截的URL模式,使用setName方法设置过滤器名称,使用setOrder方法设置过滤器执行顺序。 通过以上步骤,我们就成功地实现了一个IP过滤器。需要注意的是,我们可以根据实际需求,修改过滤器的实现逻辑,比如可以从请求头中获取IP地址,或者通过配置文件设置允许访问的IP地址列表等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆油951207

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值