[后端开发] 过滤器相关注解

这篇具有很好参考价值的文章主要介绍了[后端开发] 过滤器相关注解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、背景

使用Springboot框架开发后端,在鉴权的时候使用到了过滤器。但是在测试的过程发现,跨域的过滤器在过滤链中出现了两次,导致前端访问后端接口时报错:The 'Access-Control-Allow-Origin' headers contains multiple values,but only one allowed.错误

在浏览器端比较正常访问接口和报错接口的headers,发现报错接口出现了两次headers,然后开始了debug之路,发现:异常接口跨域过滤器进行了重复注册,最终定位到了是注解的问题。

二、不同注解的作用

1、@Component注解

在Filter类使用了@Component注解,在不指定bean名字的前提下,会默认生成一个类名首字母小写的bean name

当在CorsFilter类上面使用@Component注解,默认生成bean name是corsFilter,访问接口的时候会按照过滤器链按顺序进行过滤;

2、@WebFilter + @ServletComponentScan注解

在Filter类上线使用了@WebFilter注解,在不指定名字的情况下,默认的名字是类的完全限定名,也就是包名+类名,比如:com.example.filters.ExampleFilter。

@ServletComponentScan注解作用:@ServletComponentScan 注解告诉 Spring Boot 在启动时扫描特定的包,以查找使用 @WebFilter@WebServlet@WebListener 注解的类,并将它们注册为相应的 Servlet API 组件。

3、注册过滤器的两种方法

@Component注解

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;

@Component
public class FilterConfig {

    @Bean
    public FilterRegistrationBean<ExampleFilter> exampleFilterRegistration() {
        FilterRegistrationBean<ExampleFilter> registration = new FilterRegistrationBean<>();
        registration.setFilter(new ExampleFilter());
        registration.addUrlPatterns("/example/*");
        registration.setOrder(Ordered.HIGHEST_PRECEDENCE); // 设置过滤器的顺序
        return registration;
    }
}

OR

@WebFilter + @ServletComponentScan两个注解必须同时使用

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan("com.example.filters") // 指定过滤器所在的包
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
@WebFilter(filterName = "exampleFilter", urlPatterns = "/example/*")
public class ExampleFilter implements Filter {
    // 实现过滤器的逻辑
}

三、其他

定位方法:查看过滤链

虽然有两个过滤器都同时使用了@WebFilter注解和@Component注解,但由于其中一个过滤器在使用@WebFilter注解的时候指定了名字,和@Component默认生成的名字一致,所以在过滤器链中只有一个;

但另一个在使用@WebFilter注解时没有指定名字,所以两个注解分别注册了两个不同名字的bean,导致在调用对应接口时出错。文章来源地址https://www.toymoban.com/news/detail-853150.html

到了这里,关于[后端开发] 过滤器相关注解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Java]过滤器(Filter)

    一、什么是过滤器 过滤器是Servlet的高级特性之一,是实现Filter接口的Java类! 过滤器的执行流程:   从上面的图我们可以发现,当浏览器发送请求给服务器的时候, 先执行过滤器,然后才访问Web的资源。服务器响应Response,从Web资源抵达浏览器之前,也会途径过滤器。 过滤

    2024年02月11日
    浏览(43)
  • Java实现布隆过滤器

    背景: 为预防大量黑客故意发起非法的时间查询请求,造成缓存击穿,建议采用布隆过滤器的方法解决。布隆过滤器通过一个很长的二进制向量和一系列随机映射函数(哈希函数)来记录与识别某个数据是否在一个集合中。如果数据不在集合中,能被识别出来,不需要到数据

    2024年02月01日
    浏览(48)
  • Java 过滤器 @WebFilter 详解

    @WebFilter 注解是JavaEE中的一种注解,用于标识一个类为过滤器(Filter)。过滤器用于对请求进行过滤和处理,可以在请求到达目标资源之前或之后执行一些操作。 使用**@WebFilter**注解可以将一个类声明为过滤器,并指定过滤器的名称、URL模式、Servlet名称等。 简化配置 :不再需要

    2024年02月03日
    浏览(44)
  • Java-Web过滤器

    1.为什么需要过滤器? 2.基本介绍 3.过滤器的基本原理 1.文件目录 2.环境配置 创建maven项目,导入依赖 3.代码实现 1.login.jsp 2.LoginCheck.java 3.ManagerFilter.java编写过滤规则 4.配置web.xml告诉tomcat 5.admin.jsp 1.服务器启动 读取web.xml 根据全类名反射创建过滤器的实例,将其放在name - 实例

    2024年04月17日
    浏览(40)
  • 【Java 进阶篇】保护你的应用:Java 过滤器实现敏感词汇过滤

    在开发 Web 应用程序时,安全性是至关重要的一环。保护用户免受恶意内容的侵害是开发者义不容辞的责任之一。在这篇博客中,我们将深入研究如何使用 Java 过滤器来过滤敏感词汇,确保用户输入的内容不包含不良信息。我们将采用简单而实用的方法,让即使是初学者也能

    2024年02月03日
    浏览(40)
  • JAVA中的拦截器、过滤器

    相关解释:拦截器依赖于页面有访问controller的操作,且属于SpringMVC体系的动态拦截调用机制,是java中AOP思想的运用。 来看看源码作者的注释: 其中倒数第二段话,描述其类似于过滤器,但其特点只允许使用自定义预处理,不能处理程序本身。此处可体现AOP思想。 过滤器是

    2024年02月13日
    浏览(40)
  • Java设计模式(八)过滤器模式

    一、概要 过滤器模式是一种结构型设计模式,它允许通过一系列条件来筛选对象,并提供一种灵活的方式来组合和操作这些条件。过滤器模式将过滤条件封装成独立的过滤器类,然后使用这些过滤器来过滤对象集合,以满足特定的条件。 二、代码 以下是一个示例代码,说明

    2024年02月03日
    浏览(36)
  • 布隆过滤器及其在Java中的实际应用

    布隆过滤器一直是面试中的重点,本篇文章将深入探讨Java中的布隆过滤器的底层思想,包括它的工作原理、优缺点等。同时,我们将结合一个小实际案例,来给大家展示布隆过滤器在解决实际问题中的应用。 在数据处理领域,我们经常需要判断一个元素是否在一个集合中。

    2024年02月05日
    浏览(45)
  • 【安全】 Java 过滤器 解决存储型xss攻击问题

    跨站脚本( cross site script )为了避免与样式css(Cascading Style Sheets层叠样式表)混淆,所以简称为XSS。 XSS是一种经常出现在web应用中的计算机安全漏洞 ,也是web中最主流的攻击方式。 XSS是指恶意攻击者利用网站没有对用户提交数据进行转义处理或者过滤不足的缺点,进而添加一些

    2024年02月08日
    浏览(55)
  • Java设计模式之过滤器模式(Filter Pattern)

    过滤器模式(Filter Pattern)是一种常用的设计模式,它用于通过一系列条件来过滤对象集合,并将满足条件的对象保留下来。该模式可以帮助我们在不修改原始对象集合的情况下,根据特定的条件对集合进行筛选和处理。 在过滤器模式中,通常有三个核心角色: 过滤器接口(

    2024年02月07日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包