利用filter+maven自动版本号解决前端缓存(非入侵)

利用filter+maven自动版本号解决前端缓存(非入侵)

       原理:利用filter拦截所有前端静态资源,并为前端资源url地址拼接一个版本号参数。做到每一次发布,都会生成一个新的url地址,解决前端缓存问题。同时利用maven打包程序自动为版本配置文件,每一次打包生成一个新的版本号。

      配置步骤:

1、配置拦截器filter:

 

<!--前端资源缓存处理类-->
<filter>
    <filter-name>staticCacheFilter</filter-name>
    <filter-class>com.qcsy.springboot.filter.CacheVersionFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>staticCacheFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

 

   CacheVersionFilter类资源:

package com.qcsy.springboot.filter;




import org.hibernate.internal.util.ConfigHelper;



import javax.servlet.*;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.FileInputStream;

import java.io.IOException;

import java.util.Date;

import java.util.Optional;

import java.util.Properties;



/**

 * Description:  专门用于处理缓存的拦截器

 *

 * @author qcsy

 * @version 1.0 2020/10/15

 */

public class CacheVersionFilter  implements Filter {

    private final String[] suffixs={".js",".css","jpg","png","jpge"};

    private final String versionHeader="scdp_version=";

    private static String version="0";

    static {

        try {

            Properties properties =new Properties();

            properties.load(new FileInputStream(CacheVersionFilter.class.getClassLoader().getResource("sysconfig.properties").getPath()));

            version=properties.getProperty("system.version","0");

        }catch (Exception e){

            Properties properties =new Properties();

            try {

                properties.load(new FileInputStream(CacheVersionFilter.class.getClassLoader().getResource("bizconfig.properties").getPath()));

            } catch (IOException ex) {

                ex.printStackTrace();

            }

            version=properties.getProperty("system.version","0");

            version= Optional.ofNullable(properties.getProperty("system.version")).orElse("0").toString();

        }

    }



    @Override

    public void init(FilterConfig filterConfig) throws ServletException {



    }



    @Override

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest req = (HttpServletRequest)servletRequest;

        HttpServletResponse resp = (HttpServletResponse)servletResponse;



        String requestURL = req.getRequestURL().toString();

        String queryStr = req.getQueryString();



        // 解析静态资源

        Boolean isStaticSource=false;

        for(String suffix:suffixs){

            if(requestURL.toLowerCase().endsWith(suffix)){isStaticSource=true;break;}

        }

        if(isStaticSource){

            String newURL = null;

            if(StringUtil.isNotEmpty(queryStr) && queryStr.trim().indexOf(versionHeader) == -1){

                newURL = requestURL + "?" + queryStr + "&" +versionHeader+ version;

                resp.sendRedirect(newURL);

                return;

            }

            if(StringUtil.isEmpty(queryStr)){

                newURL = requestURL + "?" + versionHeader + version;

                resp.sendRedirect(newURL);

                return;

            }

        }

        filterChain.doFilter(servletRequest,servletResponse);

    }



    @Override

    public void destroy() {

    }

}

2、配置版本配置文件:

可以在系统的sysconfig.properties或者bizconfig.properties配置。建议最好在bizconfig.propersties配置

 

           system.version=${system.version}

3、配置maven的 pom.xml让程序打包或者自动编译的时候,生成新的版本号:

添加一个系统版本号的自动时间属性:

 

<!--系统打包版本号-->

<system.version>${maven.build.timestamp}</system.version>

 

4、最后呈现效果:每一次发布都会重新刷新缓存,如图

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值