You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SpringBoot创建CorsFilter Bean遇BeanNotOfRequiredTypeException错误求助

问题分析与解决方案

错误原因

你定义的@Bean方法名为corsFilter,返回类型是FilterRegistrationBean<CorsFilter>,但系统中存在对名称为corsFilter、类型为org.springframework.web.filter.CorsFilter的Bean依赖(可能是你的代码注入,或是Spring自动配置的隐式依赖)。Spring容器尝试将该Bean适配为CorsFilter类型时,发现实际类型是FilterRegistrationBean,类型不匹配,因此抛出BeanNotOfRequiredTypeException。

解决方案

方案1:拆分Bean定义(推荐)

分别定义CorsFilter类型的Bean和对应的注册Bean,既满足类型依赖,又完成过滤器注册:

@Bean
public CorsFilter corsFilter() {
    CorsConfiguration corsConfig = new CorsConfiguration();
    corsConfig.setAllowCredentials(true);
    corsConfig.setAllowedOrigins(delimitedStringToList(corsFilterAllowedOrigins));
    corsConfig.setAllowedHeaders(delimitedStringToList(corsFilterAllowedHeaders));
    corsConfig.setAllowedMethods(delimitedStringToList(corsFilterAllowedMethods));

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration(corsFilterAllowedPathPattern, corsConfig);

    return new CorsFilter(source);
}

@Bean
public FilterRegistrationBean<CorsFilter> corsFilterRegistration(CorsFilter corsFilter) {
    FilterRegistrationBean<CorsFilter> registrationBean = new FilterRegistrationBean<>(corsFilter);
    registrationBean.setOrder(Ordered.HIGHEST_PRECEDENCE);
    return registrationBean;
}

方案2:调整依赖注入类型(仅当不需要单独CorsFilter Bean时)

如果系统中没有对CorsFilter类型的直接依赖,只是你误写了注入类型,可以将注入点的类型改为FilterRegistrationBean<CorsFilter>,并保持原Bean定义不变。但这种方式不如方案1通用,不推荐。

补充说明

Spring Boot中注册过滤器时,若同时需要该Filter作为Bean被注入,必须拆分定义;若仅需注册过滤器,也可以直接返回Filter类型并配合@Order注解,但使用FilterRegistrationBean能更灵活地配置过滤器的路径、顺序等属性。

内容的提问来源于stack exchange,提问作者LittleLingzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:57:05