若依Ruoyi中优先从本地文件加载静态资源

   1、Spring Boot方法说明       

在 Spring Boot 中,若要让addResourceHandlers优先加载 JAR 包内的资源,可通过合理设置资源位置的顺序来达成。因为 Spring 会按照资源位置配置的先后顺序进行搜索,所以把 JAR 包内的资源路径放在前面就能实现优先加载。

下面是一个配置示例:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
                .addResourceLocations(
                        "classpath:/static/",  // 优先加载JAR包内的资源
                        "file:./static/"      // 再加载外部文件系统的资源
                )
                .setCachePeriod(3600)
                .setUseLastModified(true);
    }
}

配置说明
资源搜索顺序:Spring 会按照addResourceLocations方法中路径的顺序去搜索资源。在上述例子中,会先搜索 JAR 包内classpath:/static/路径下的资源,若找不到,才会去搜索外部文件系统file:./static/路径下的资源。
外部资源覆盖:要是你有覆盖 JAR 包内资源的需求,比如在测试或生产环境中,可以把外部资源路径添加到 JAR 包资源路径之后。
路径协议
       classpath:用于引用 JAR 包内的资源。
       file:用于引用文件系统中的资源。

2、若依中调整静态资源加载方式

调整ResourcesConfig的addResourceHandlers(ResourceHandlerRegistry registry)方法,模块位置在ruoyi-framework\src\main\java\com\ruoyi\framework\config\ResourcesConfig.java文件中。

 @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        //Spring Boot(static → public → resources → META-INF/resources)检查这些目录中的资源
        /** 本地文件上传路径 */
        registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");

        /** swagger配置 */
        registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/springfox-swagger-ui/");

        /** logo和img文件加载优先级配置,文件访问权限,由ShiroConfig.java配置*/
        registry.addResourceHandler("/logo/**") //访问路径
                .addResourceLocations(
                        "file:./static/logo/", //优先加载外部文件系统的资源,路径必须以‘/’结尾
                        "classpath:/static/logo/" //再加载JAR包内的资源
                );
        registry.addResourceHandler("/img/**")
                .addResourceLocations(
                        "file:./static/img/",
                        "classpath:/static/img/"
                );
    }

如果需要调整权限,比如logo文件在登录前允许访问,需要在ShiroConfig.java的

ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager)添加相应的过滤器,如:
 public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager)
    {
        CustomShiroFilterFactoryBean shiroFilterFactoryBean = new CustomShiroFilterFactoryBean();
        // Shiro的核心安全接口,这个属性是必须的
        shiroFilterFactoryBean.setSecurityManager(securityManager);
        // 身份认证失败,则跳转到登录页面的配置
        shiroFilterFactoryBean.setLoginUrl(loginUrl);
        // 权限认证失败,则跳转到指定页面
        shiroFilterFactoryBean.setUnauthorizedUrl(unauthorizedUrl);
        // Shiro连接约束配置,即过滤链的定义
        LinkedHashMap<String, String> filterChainDefinitionMap = new LinkedHashMap<>();
        // 对静态资源设置匿名访问
        filterChainDefinitionMap.put("/favicon.ico**", "anon");
        filterChainDefinitionMap.put("/ruoyi.png**", "anon");
        filterChainDefinitionMap.put("/irootech.png**", "anon");
        filterChainDefinitionMap.put("/static/**", "anon");
        filterChainDefinitionMap.put("/logo/**", "anon"); //logo
        filterChainDefinitionMap.put("/html/**", "anon");
        filterChainDefinitionMap.put("/css/**", "anon");
        filterChainDefinitionMap.put("/docs/**", "anon");
        filterChainDefinitionMap.put("/fonts/**", "anon");
        filterChainDefinitionMap.put("/img/**", "anon"); //img
        filterChainDefinitionMap.put("/ajax/**", "anon");
        filterChainDefinitionMap.put("/js/**", "anon");
        filterChainDefinitionMap.put("/ruoyi/**", "anon");
        filterChainDefinitionMap.put("/captcha/captchaImage**", "anon");
        filterChainDefinitionMap.put("/api/**", "anon");
...

3、文件位置

     在jar包运行目录下,创建如下两个目录,对应的文件就会覆盖jar包中的同名文件

/static/logo
/static/img

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值