springboot静态资源解析失效处理
创始人
2025-05-31 02:12:51
0

继承WebMvcConfigurationSupport导致默认配置失效

  • 问题描述
  • 问题分析
  • 解决问题
    • 方式1:WebMvcConfigurationSupport补充静态资源【不推荐】
    • 方式2:改写mvc自定义配置实现【推荐】
  • 总结

问题描述

我们开发了一个基于SpringBoot的工具(starter封装),可以提供通用的功能和管理页面。为了让这些页面能够在不同的SpringBoot项目中使用,我们采用了一种叫做webjars的技术,将页面的静态资源(如JavaScript和CSS文件)存放在一个公共的地方。但是有些项目访问这些资源时可能会遇到404错误的问题,无法正常显示页面。

问题分析

首先springboot默认提供包括static webjars的资源解析的。这个是默认的mvc配置提供。因此检查出现404的项目的所有mvc配置是否有被调整。

发现该项目存在跨域配置. 是通过WebMvcConfigurationSupport继承实现

@Configuration
public class AppConfig extends WebMvcConfigurationSupport {/*** 统一处理跨域问题*/@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "DELETE", "PUT").allowCredentials(true).maxAge(3600);}
}
  • 结论: 通过WebMvcConfigurationSupport继承实现会导致默认mvc配置失效。
  • 原因: 看如下源码
    在这里插入图片描述

解决问题

方式1:WebMvcConfigurationSupport补充静态资源【不推荐】

静态资源解析失效,因为是覆盖默认mvc配置,那么。直接补充就好

@Configuration
public class AppConfig extends WebMvcConfigurationSupport {/*** 统一处理跨域问题*/@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "DELETE", "PUT").allowCredentials(true).maxAge(3600);}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 解决静态资源无法访问的问题registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}
}

虽然能解决问题,WebMvcConfigurationSupport但是这种方式不太好,以后还有可能其他默认行为被覆盖,还得补。

方式2:改写mvc自定义配置实现【推荐】

实现WebMvcConfigurer接口,只会覆盖实现接口逻辑。springboot默认的mvc配置不会被改变

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {/** 跨域支持*/@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE").allowCredentials(true).allowedHeaders("*").maxAge(3600);}
}

总结

springboot项目中想要调整mvc配置.尽量通过实现WebMvcConfigurer 接口实现。直接继承WebMvcConfigurationSupport会,导致默认处理失效。

相关内容

热门资讯

常州法院2025年前三季度调解... 调解结案16474件、调解成功率24.08%——这是2025年前三季度常州法院交出的司法成绩单。通过...
安徽省政协研究室副主任陈鑫已任... 据铜陵市政府官网消息,11月20日上午,市委举行理论学习中心组学习会议,邀请省委社会工作部副部长高维...
原创 联... 据光明网报道,11月19日,在联合国大会的讨论中,日本企图争取成为安理会常任理事国的梦想再次破灭,令...
南部关于全县规范法律咨询服务机... 一、专项行动时间 自即日起至2025年12月。 二、举报受理范围 社会各界反映强烈的某些法律咨询服务...
“男子持刀入室盗窃”视频引发关... 近日,一段疑似“小偷”入室盗窃被业主家中监控拍下的视频在网上引发关注。11月21日晚,“翠屏公安”微...
绝不允许日本军国主义幽灵复活!... 2025年11月7日,日本首相高市早苗宣称,如果中国大陆对台湾出动军舰并使用武力,可能会构成“存亡危...
【解决】AI法律助手荣获202... 2025全球数字经济大会启幕,搭建国际数字合作高端平台 经国务院批准,由北京市人民政府、国家互联网信...
嘉兴男子与妻争吵,突然将行李箱... 近日,浙江嘉兴一对夫妻因琐事发生争吵,丈夫突然将装满衣物的行李箱从6楼扔到楼下,引发关注。11月22...
三地107家律所齐聚丰台,京津... 11月22日,京津冀律师驿站举办“党建业务深度融合 促进行业规范发展”主题活动,发布“百千万行动计划...