当前位置: 首页 > news >正文

09.前后端合并部署

Vue 前端打包并接入 Spring Boot 操作步骤

本文只记录操作步骤,适用于当前项目 CF-EVRS

1. 打包前端

前端项目目录:

F:\IdeaProjectJava\CF-EVRS\vue_CF-EVRS

在该目录执行:

cd F:\IdeaProjectJava\CF-EVRS\vue_CF-EVRS
npm run build

执行完成后,会生成打包目录:

F:\IdeaProjectJava\CF-EVRS\vue_CF-EVRS\dist

2. 放到后端静态资源目录

后端静态资源目录:

F:\IdeaProjectJava\CF-EVRS\src\main\resources\static

操作要求:

  1. dist 目录中的内容复制到 static 目录中。
  2. 复制的是 dist 里面的文件和子目录,不是把整个 dist 文件夹再套一层放进去。

复制完成后,目录结构应类似:

src\main\resources\static
├─ index.html
├─ favicon.ico
├─ css
├─ js
└─ fonts

3. 配置 SecurityConfig 放行前端页面和静态资源

配置文件位置:

F:\IdeaProjectJava\CF-EVRS\src\main\java\com\sys\config\SecurityConfig.java

configure(HttpSecurity http) 中,放行首页和静态资源访问。

可直接按下面这种方式配置:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {@Autowiredprivate JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;@Beanpublic BCryptPasswordEncoder passwordEncoder() {return new BCryptPasswordEncoder();}@Overrideprotected void configure(HttpSecurity http) throws Exception {http.csrf().disable().cors().and().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests().antMatchers("/","/index.html","/favicon.ico","/css/**","/js/**","/fonts/**","/img/**").permitAll().antMatchers("/api/auth/**", "/api/user/**", "/profile/**", "/uploads/**").permitAll().anyRequest().authenticated().and().addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);}
}

4. 启动后端

回到项目根目录执行:

cd F:\IdeaProjectJava\CF-EVRS
mvn spring-boot:run

或者直接在 IDEA 中启动 com.sys.Application

启动成功后访问:

http://localhost:8089/

5. 操作顺序总结

固定顺序如下:

  1. 前端执行 npm run build
  2. dist 内容复制到 src/main/resources/static
  3. 配置 SecurityConfig 放行首页和静态资源
  4. 启动后端
http://www.jsqmd.com/news/922423/

相关文章:

  • 工具类篇【四】日志脱敏
  • TVA在传统安防迈向智能物联(AIoT)中的突破与应用(5)
  • SpringCloud--Config Server配置中心学习总结
  • 揭开黑盒:理解大模型内部运行逻辑对 QA 发现边界缺陷的帮助
  • 学术文献自动化管理革命:Zotero SciPDF插件深度解析
  • 昨日的欺骗的内容入口:听众为什么会搜索它
  • 聊聊我在第三方支付公司的经历
  • 从失忆到记住一切:Spring AI AutoMemoryTools 与 Session API 实战
  • 9大排序算法,你了解多少?
  • FeignClient注解及参数问题
  • 天赐范式第59天:“控制不动点“vs“数值僵尸“——当流场被钉在临界状态,是死了还是被控住了?
  • idea快速创建SpringCloud项目
  • EldenRingSaveCopier:拯救你的《艾尔登法环》游戏进度的终极指南
  • VUE跨页面传值的精妙
  • 网络技术12-FTP协议详解——传统文件传输的“老派方案“
  • FUXA管道动画制作:从静态流程图到动态工业监控的转变
  • Windows 11安装绕过工具终极指南:让老旧电脑也能流畅升级
  • 抽象之美——万物皆可设计
  • 济南倍乐管家:莱芜专业的深度清洁软装地毯公司选哪家 - LYL仔仔
  • MTK刷机工具终极指南:3步解锁联发科设备救砖与系统修复
  • 2026年宜昌市CPPM报名十大核心问题全流程答疑 - 众智商学院课程中心
  • 别再死记硬背公式了!用Python+PyTorch图解马尔可夫随机场(MRF)在图像去噪中的应用
  • 【Python系列课程】NumPy数组计算(下):向量化运算、广播机制与聚合函数
  • 2026西安曲江家政服务行业观察:唐僧到家等机构如何引领行业规范化发展 - 资讯快报
  • Beyond Compare 5密钥生成器:深度解析Python逆向工程实现方案
  • AI写专著高效之道:借助AI工具,3天完成20万字专著创作!
  • 2026年苏州区域专业防水补漏3家本土合规服务企业全方位分析与场景适配解读 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 7步精通思源宋体TTF:开源中文字体终极解决方案
  • Redis安装部署
  • 源码分析【三】ArrayList与LinkedList的比较