iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot设置静态资源访问控制和封装集成方案
  • 636
分享到

SpringBoot设置静态资源访问控制和封装集成方案

2024-04-02 19:04:59 636人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

背景 最近在着手公司框架优化及项目实际应用,原先方案是SpringBoot+html前后端分离单独部署,后端人员兼职前端开发,后续产品线业务进行优化,面向企业使用部分由移动网站人员负

背景

最近在着手公司框架优化项目实际应用,原先方案是SpringBoot+html后端分离单独部署,后端人员兼职前端开发,后续产品线业务进行优化,面向企业使用部分由移动网站人员负责设计开发,内部配置后台管理还是由后端负责,随着框架不停迭代与使用的项目越来越多,项目升级框架变得十分麻烦,后端部分可以通过Maven私服进行版本迭代,后台管理页面升级则需要进行各个项目拷贝,所以决定对框架进行整合,将后台管理页面与框架后端代码进行整合发布。

结构设计

  • 框架打包后台管理相关标准资源及页面(框架public文件夹)
  • 项目使用框架,开发具体业务配置管理页面(项目static文件夹)
  • 项目需要个性化框架页面时,在项目static文件夹建立与框架同目录同名称资源文件进行覆盖,访问时优先级高于框架目录

springBoot静态资源访问

自定义访问路径

自定义WEBConfig实现WebmvcConfigurer,重写addResourceHandlers方法


@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Value("${system.projectName}")
    private String projectName;
 

    
    @Override
    public void addResourceHandlers(ResourceHandlerReGIStry registry) {
        //第一个方法设置访问路径前缀,第二个方法设置资源路径
        registry.addResourceHandler("/" + projectName + "*.woff</exclude>
                    <exclude>***.ico</exclude>
                </excludes>
            </resource>
            <resource>
                <filtering>false</filtering>
                <directory>src/main/resources</directory>
                <includes>
                    <include>***.ttf</include>
                    <include>**

        File[] flist=file1.listFiles();
        for (File f : flist) {
            if(f.isFile()){
                copyFile(f.getPath(),f2+"/"+f.getName()); //调用复制文件的方法
                //System.out.println("原路径["+f.getPath()+"] 被复制路径["+f2+"/"+f.getName()+"]");
            }else if(f.isDirectory()){
                copyFileFolder(f.getPath(),f2+"/"+f.getName()); //调用复制文件夹的方法
                //System.out.println("原路径["+f.getPath()+"] 被复制路径["+f2+"/"+f.getName()+"]");
            }
        }
    }

    
    public static void copyFileFolder(String sourceFolderPath,String targetFolderPath) throws IOException {
        //创建文件夹
        File file=new File(targetFolderPath);
        if(!file.exists()){
            file.mkdirs();
        }
        copy(sourceFolderPath,targetFolderPath);
    }

    
    public static void copyFile(String sourceFilePath, String tagretFilePath) throws IOException {
        try {
            InputStream in = new FileInputStream(sourceFilePath);
            OutputStream out = new FileOutputStream(tagretFilePath);
            byte[] buffer = new byte[2048];
            int nBytes = 0;
            while ((nBytes = in.read(buffer)) > 0) {
                out.write(buffer, 0, nBytes);
            }
            out.flush();
            out.close();
            in.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static boolean delete(String fileName) {
        File file =new File(fileName);
        if (!file.exists()) {
            //System.out.println("删除文件失败:" + fileName +"不存在!");
            return false;
        }else {
            if (file.isFile())
                return deleteFile(fileName);
            else
                return deleteDirectory(fileName);
        }
    }

    
    public static boolean deleteFile(String fileName) {
        File file =new File(fileName);
        // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
        if (file.exists() && file.isFile()) {
            if (file.delete()) {
                //System.out.println("删除单个文件" + fileName +"成功!");
                return true;
            }else {
                //System.out.println("删除单个文件" + fileName +"失败!");
                return false;
            }
        }else {
            //System.out.println("删除单个文件失败:" + fileName +"不存在!");
            return false;
        }
    }

    
    public static boolean deleteDirectory(String dir) {
        // 如果dir不以文件分隔符结尾,自动添加文件分隔符
        if (!dir.endsWith(File.separator))
            dir = dir + File.separator;
        File dirFile =new File(dir);
        // 如果dir对应的文件不存在,或者不是一个目录,则退出
        if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
            System.out.println("删除目录失败:" + dir +"不存在!");
            return false;
        }
        boolean flag =true;
        // 删除文件夹中的所有文件包括子目录
        File[] files = dirFile.listFiles();
        for (int i =0; i < files.length; i++) {
            // 删除子文件
            if (files[i].isFile()) {
                flag = deleteFile(files[i].getAbsolutePath());
                if (!flag)
                    break;
            }
            // 删除子目录
            else if (files[i].isDirectory()) {
                flag = deleteDirectory(files[i].getAbsolutePath());
                if (!flag)
                    break;
            }
        }
        if (!flag) {
            //System.out.println("删除目录失败!");
            return false;
        }
        // 删除当前目录
        if (dirFile.delete()) {
            //System.out.println("删除目录" + dir +"成功!");
            return true;
        }else {
            return false;
        }
    }

}

外部静态资源访问与优先级设置

设置yml文件中的static-locations配置项,多个使用,隔开,同时指定顺序为访问的优先级


spring:
  resources:
    static-locations: classpath:static/,classpath:public/,file:static/

最终目录结构图如下,框架部分完全是项目启动时自动解压拷贝的,项目部分则是由具体项目进行开发,项目部分也可以很方便的进行框架部分功能重构,例如登录页,主页面修改等,本方式支持jar包和war包两种打包方式

到此这篇关于SpringBoot静态资源访问控制和封装集成方案的文章就介绍到这了,更多相关SpringBoot静态资源访问控制内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringBoot设置静态资源访问控制和封装集成方案

本文链接: https://www.lsjlt.com/news/131667.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot设置静态资源访问控制和封装集成方案
    背景 最近在着手公司框架优化及项目实际应用,原先方案是springboot+html前后端分离单独部署,后端人员兼职前端开发,后续产品线业务进行优化,面向企业使用部分由移动网站人员负...
    99+
    2022-11-12
  • SpringBoot怎么设置静态资源访问控制和封装集成
    这篇文章主要讲解了“SpringBoot怎么设置静态资源访问控制和封装集成”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么设置静态资源访问控制和封装集成”吧!背景最近在...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作