若依前端后打成一个JAR包部署

客户需要将项目前后端作为一个整体打包成jar,不使用nginx方式转发。使用框架是若依前后端分离,后端springboot,前端vue,目的就是把vue打入jar。

一、前端修改

  1. ruoyi-ui/src/router/index.js文件 ,将 mode: ‘history’ 改成 mode: ‘hash’
    export default new Router({mode: 'hash', scrollBehavior: () => ({ y: 0 }),routes: constantRoutes
    })
    

    2、修改ruoyi-ui/.env.production文件

    说明:VUE_APP_BASE_API = '/prod-api'是原来,我这前后端加了访问路径如VUE_APP_BASE_API = '/ReportApi'
    #VUE_APP_BASE_API = '/prod-api'
    VUE_APP_BASE_API = '/ReportApi'

    3、修改vue.config.js

二、后端修改

1、ruoyi-admin pom文件加入以下依赖

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

2、增加配置文件  (dev和local可以都改),增加thymeleaf配置和访问路径配置

  #前后端打成一个JAR包配置thymeleaf:prefix: classpath:/dist/mode: HTMLencoding: utf-8cache: false

3、修改ResourcesConfig文件内容,新增以下部分addViewControllers

    @Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController("/index").setViewName("index.html");registry.addViewController("/").setViewName("index.html");registry.setOrder(Ordered.HIGHEST_PRECEDENCE);}

4、修改ResourcesConfig文件内容,替换addResourceHandlers内容如下:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {/** 本地文件上传路径 */registry.addResourceHandler(Constants.RESOURCE_PREFIX + "/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/");/** 页面静态化 */registry.addResourceHandler("/static/**").addResourceLocations("classpath:/dist/static/");/** swagger配置 */registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}

5、根据情况配置访问权限修改ruoyi-framework项目中的SecurityConfig.java类,配置静态资源访问权限

@Overrideprotected void configure(HttpSecurity httpSecurity) throws Exception{// 注解标记允许匿名访问的urlExpressionUrlAuthorizationConfigurer<HttpSecurity>.ExpressionInterceptUrlRegistry registry = httpSecurity.authorizeRequests();permitAllUrl.getUrls().forEach(url -> registry.antMatchers(url).permitAll());httpSecurity// CSRF禁用,因为不使用session.csrf().disable()// 禁用HTTP响应标头.headers().cacheControl().disable().and()// 认证失败处理类.exceptionHandling().authenticationEntryPoint(unauthorizedHandler).and()// 基于token,所以不需要session.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()// 过滤请求.authorizeRequests()// 对于登录login 注册register 验证码captchaImage 允许匿名访问.antMatchers("/login", "/register", "/captchaImage").permitAll()// 静态资源,可匿名访问.antMatchers(HttpMethod.GET, "/**/**","/**","/index","/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll().antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll().antMatchers("/test/**","/aicccms/**","/ICD/**").permitAll()// 除上面外的所有请求全部需要鉴权认证.anyRequest().authenticated().and().headers().frameOptions().disable();// 添加Logout filterhttpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);// 添加JWT filterhttpSecurity.addFilterBefore(authenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);// 添加CORS filterhttpSecurity.addFilterBefore(corsFilter, JwtAuthenticationTokenFilter.class);httpSecurity.addFilterBefore(corsFilter, LogoutFilter.class);}

6、将前端dist移动到resources目录下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/54827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue-jsonp的使用和腾讯地图当前经纬度和位置详情的获取

1.下载&#xff1a; npm install –save vue-jsonp2.main.js中引入&#xff1a; //腾讯逆地址解析会用到jsonp import {VueJsonp} from vue-jsonp; Vue.use(VueJsonp);3.腾讯地图中使用 uniapp中获取*经纬度*和通过经纬度获取当前**位置详情** //获取当前经纬度 getLocation…

职场上的人情世故你知多少

1.发微信找人帮忙&#xff0c;半天不回&#xff0c;那基本没戏了&#xff0c;不要再打扰了&#xff0c;懂得都懂。 2.能力越大&#xff0c;事情越多&#xff0c;要懂得张弛有度&#xff0c;不要把自己全抛出去&#xff0c;给自己留点余地&#xff0c;毕竟你不知道别人如何暗地…

Windows电脑本地安装AI文生音乐软件结合内网穿透远程访问制作

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 今天和大家分享一下在Windows系统电脑上本地快速部署一个文字生成音乐的AI创作服务MusicGPT&#xff0c;并结合cpolar内网穿透工具实现随时随地远程访问使用进行AI音…

光伏“地图导航”:光照、政策、电价一目了然

当代的快节奏生活中&#xff0c;地图导航的精准定位技术如同一盏照明灯&#xff0c;为我们照亮了前方的道路。许多光伏人纷纷反映&#xff0c;如果光伏也有这样的地图就好了&#xff0c;能够结合各种建设光伏的因素快速完成选址&#xff0c;能够极大地提高效率。今天小编就来分…

PAT甲级-1013 Battle Over Cities

题目 题目大意 给定一个城市图&#xff0c;如果攻陷一个城市&#xff0c;该城市连接的所有路都要被销毁。要求计算出连通剩余的城市最少需要修建几条路。该图有n个顶点&#xff0c;m条边&#xff0c;k个重点城市。分别求出每个重点城市被攻陷&#xff0c;连通剩余城市需要修建…

[面试] java开发面经-1

前言 目录 1.看到你的简历里说使用Redis缓存高频数据&#xff0c;说一下Redis的操作 2.说一下Redis的缓存击穿、缓存穿透、缓存雪崩 3.你的项目中使用了ThreadLocal&#xff0c;那么当有两个请求同时发出时&#xff0c;会怎么处理&#xff0c;可以同时处理两个请求吗 4.使用…

第三课 Vue中的方法的定义及事件绑定指令

Vue中的方法的定义及事件绑定指令 方法定义 方法定义通过Vue对象中的methods属性进行拓展 1&#xff09;基础示例 new Vue({el: #app,methods: {fun(){alert(1);}}})2&#xff09;操作对象数据 new Vue({el: #app,data: {val: Hello World !},methods: {fun(){alert(val);}}…

【GESP】C++一级练习BCQM3037,简单计算,国庆七天乐收官

又回到了简单计算的题目&#xff0c;继续巩固练习。 题解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3037/ 【GESP】C一级练习BCQM3037&#xff0c;简单计算&#xff0c;国庆七天乐收官 | OneCoder又回到了简单计算的题目&#xff0c;继续巩固练习。https://www.cod…

内网渗透-隧道代理转发

文章目录 前言环境搭建工具清单工具使用Frp命令执行实验 Lcx命令执行实验 reGeorg命令执行实验Proxifier ew(EarthWorm)正向代理命令执行实验 反向代理命令执行实验SocksCap netsh命令执行 pingtunnel命令执行实验 ngrok命令执行&&实验 cs命令执行实验 前言 本文章介绍…

10/11

一、ARM课程大纲 二、ARM课程学习的目的 2.1 为了找到一个薪资水平达标的工作&#xff08;单片机岗位、驱动开发岗位&#xff09; 应用层(APP) 在用户层调用驱动层封装好的API接口&#xff0c;编写对应的API接口 ----------------------------------------------------…

CWE-1395:同源漏洞引起的安全威胁

1. 内容概述 产品依赖于一个或多个第三方组件&#xff0c;这些组件包含已知的安全漏洞。由于这些漏洞尚未被修复&#xff0c;可能会被攻击者利用&#xff0c;从而危及产品的整体安全性。未能及时更新或替换这些第三方组件可能导致严重的安全风险。 具体来说&#xff0c;许多产…

探索TCP协议的奥秘:Python中的网络通信

引言 在网络通信的世界里&#xff0c;TCP协议&#xff08;传输控制协议&#xff09;就如同一座桥梁&#xff0c;连接着数据的发送方和接收方。作为一名拥有20年实战经验的编码专家&#xff0c;我深知TCP协议在构建稳定、可靠的网络应用中的重要性。今天&#xff0c;我将带领大…

Redis:通用命令 数据类型

Redis&#xff1a;通用命令 & 数据类型 通用命令SETGETKEYSEXISTSDELEXPIRETTLTYPEFLUSHALL 数据类型 Redis的客户端提供了很多命令用于操控Redis&#xff0c;在Redis中&#xff0c;key的类型都是字符串&#xff0c;而value有多种类型&#xff0c;每种类型都有自己的操作命…

await的作用(举例)

问&#xff1a; 当方法a中又三个方法a1、a2、a3、a4都是异步函数&#xff0c;现在在a2、a4追加await&#xff0c;方法执行顺序是什么&#xff1f;主进程顺序是什么&#xff1f; 答&#xff1a; 通过一个具体的例子来说明当方法 a 中有四个异步方法 a1、a2、a3 和 a4&#xff…

Spring Cache 的说明及常用注解

一.介绍 Spring Cache是Spring Framework中的一个模块&#xff0c;用于简化和统一缓存的使用。它提供了一种将缓存逻辑与应用程序业务逻辑分离的方式&#xff0c;使得我们可以更方便地使用缓存来提高应用程序的性能。 二.主要特性 注解支持&#xff1a;Spring Cache提供了一组…

python 自学总结

# 这是一个代码的注释 注释可以使用# 一般而言#号后面要加空格表示规范&#xff0c;多行注释使用“”“ ”“”符合包裹 # type()这个是判断变量类型# 变量的形式 meny 50 # 自己定义叫标识符 不可以使用关键字 不可以用字母开头 规范性 下划线命名法 英文字母全部小写 …

Dbt增量策略模型实践指南

参考&#xff1a;dbt Incremental Strategies | Indicium Engineering (medium.com) 本文讨论dbt的增量策略&#xff0c;介绍工作原理、以及各自优缺点。下篇讲解如何在模型中实现增量策略。 使用增量模型可以仅仅处理最近的数据&#xff0c;减少数据处理成本和时间。当然首先要…

Solon 3.0 引入 SqlUtils :数据库操作的反朴归真

Solon 3.0 版本发布后&#xff0c;带了一个新的特性 —— SqlUtils。这一全新的数据库操作框架给开发者提供了更加透明、灵活的数据库交互方式&#xff0c;可显著提升了代码的透明度和维护性。本文将浅入探讨 SqlUtils 的引入背景、使用方法以及它对市场和开发者群体的潜在影响…

pytorch 与 pytorch lightning, pytorch geometric 各个版本之间的关系

主要参考 官方的给出的意见&#xff1b; 1. pytorch 与 pytorch lightning 各个版本之间的关系 lightning 主要可以 适配多个版本的 torch; https://lightning.ai/docs/pytorch/latest/versioning.html#compatibility-matrix&#xff1b; 2. pytorch 与 pytorch geometric 各…

自动化的抖音

文件命名 main.js var uiModule require("ui_module.js"); if (!auto.service) {toast("请开启无障碍服务");auto.waitFor();} var isRunning true; var swipeCount 0; var targetSwipeCount random(1, 10); var window uiModule.createUI(); uiMo…