SpringBoot 运行时修改jar内置静态资源
引出
项目一个小需求,将之前一个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 !=