SpringBoot 运行时修改jar内置静态资源

本文介绍如何在SpringBoot应用运行时,通过ResourceTransformer接口动态修改jar包内的静态资源,尤其是针对前端页面中API配置的需求。在不采用静态资源外置的情况下,通过实现ResourceTransformer和WebMvcConfigurer接口,实现在返回给客户端前修改静态资源内容,例如修改JS文件中的API地址。同时提及了ResourceHandlerRegistrationCustomizer作为备用方案,但需要注意其包权限限制和可能与Spring默认配置冲突的问题。
摘要由CSDN通过智能技术生成

引出

项目一个小需求,将之前一个springboot jar包,应用访问根路径配置化(如127.0.0.1:8081/getUser -> 127.0.0.1/myapp/v1/getUser)。
环境: springboot 1.5.22
我们知道对于后端api,有现成配置 server.context-path,好搞
前端页面的配置放在一个js文件里 sysconfig.js
然后这个项目前后没分离,前端静态资源全放jar包里 spring.resource.static-locations=classpath:/webapp/

要让前端访问到正确的api地址就必须页面加载前改掉这个js文件。
最容易想到的方法是
静态资源外置:webapp下的资源不放jar里面,安装流程中文件下发时替换js中的配置就好了

但我是个懒人不想改脚本,用上面方式dockerfile又要重写,有没其他办法?
比如运行时返给客户端浏览器的时候偷偷把js改掉?

ResourceTransformer

springmvc的相关资源搜了一圈,发现ResourceTransformer这个接口符合要求,
你可以理解成静态资源的filterChain,返给客户端前可以拿资源做些操作。
spring默认有几个实现,比如CssLinkResourceTransforrmer,拿来改css文件里的link标签
拷它代码改个类出来:

public class DynamicApiPathResourceTransformer implements ResourceTransformer {
   
    
    private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;
    private String apiHome = "/";
    public static String JS_CONFIG_FILE = "sysconfig·js";

    public DynamicApiPathResourceTransformer(String apiHome) {
   
        if (apiHome != 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值