当前位置: 首页 > 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.zskr.cn/news/1433746.html

相关文章:

  • 工具类篇【四】日志脱敏
  • SpringCloud--Config Server配置中心学习总结
  • 学术文献自动化管理革命:Zotero SciPDF插件深度解析
  • 聊聊我在第三方支付公司的经历
  • FeignClient注解及参数问题
  • FUXA管道动画制作:从静态流程图到动态工业监控的转变
  • 2026年宜昌市CPPM报名十大核心问题全流程答疑 - 众智商学院课程中心
  • 【Python系列课程】NumPy数组计算(下):向量化运算、广播机制与聚合函数
  • 别再死记硬背公式了!用Python+PyTorch图解马尔可夫随机场(MRF)在图像去噪中的应用
  • 2026西安曲江家政服务行业观察:唐僧到家等机构如何引领行业规范化发展 - 资讯快报
  • 2026年苏州区域专业防水补漏3家本土合规服务企业全方位分析与场景适配解读 专业防水公司排名推荐(2026年5月防水补漏最新TOP权威排名) - 鼎壹万修缮说
  • 老显卡(GTX750/1050)也能玩转AI绘画?手把手教你升级驱动装CUDA11.4
  • 3分钟快速解密QQ音乐:qmcdump让你的加密音乐重获自由播放
  • 数据偏见:识别、规避与实战应对策略
  • Royal TSX中文汉化包:3分钟让专业远程管理工具说中文
  • 终极网盘下载加速指南:3步实现直链解析与高速文件传输
  • Maven与Gradle的区别
  • AI与大模型新闻日报 | 2026-05-31
  • 西安曲江家政服务怎么选?2026曲江家政公司评测与实战落地指南 - 资讯快报
  • 告别版本混乱!在Ubuntu 22.04上管理多个.NET SDK(8.0/6.0/7.0)的保姆级指南
  • AI赋能Web3营销:从数据洞察到个性化对话的实战指南
  • 5个创意用法解锁Parsec-vdd虚拟显示器的隐藏潜力
  • 新郑震捷再生资源:荥阳专业的废旧物资拆除公司有哪些 - LYL仔仔
  • OBS StreamFX:免费打造专业级直播画面的终极特效插件
  • 从N-gram到ChatGPT:语言模型的技术演进与核心原理剖析
  • 告别网盘限速烦恼:9大平台直链下载助手完全指南
  • 微信通讯录大扫除:如何用WechatRealFriends揪出那些悄悄删除你的“好友“
  • 如何高效实现抖音无水印视频下载:开源工具的完整实践指南
  • 别再死磕传统LOD了!用UE5的Nanite做开放世界,我踩过的坑和最佳实践
  • 别再死记硬背了!用这5个高频场景,帮你彻底搞懂Docker常用命令(附CentOS/Ubuntu实战)