前端VUE调用API实现重启后台

第一种方法

(平常前后端分离时可以使用,但项目打包成jar包后,使用的devtools依赖导致启动jar包失败)

前端创建一个按钮,调用该api即可。

<el-button size="medium" round type="primary" icon="el-icon-refresh" style="color: black" @click="restart">重新启动服务器
</el-button>

前端methods方法

restart(){
  this.$http.post('/restart').then(res => {
    if(res.data){
      console.log(res.data)
      this.$message({
        message:'正在重启服务!',
        type: 'success',
        offset: 350,
        showClose: true
      })
    }
    else {
      this.$message({
        message:'重启服务失败!',
        type: 'success',
        offset: 350,
        showClose: true
      })
    }
  })
}

后端代码

@CrossOrigin
@PostMapping(value="api/restart")
@ResponseBody
public boolean restart() {
    Restarter restarter = Restarter.getInstance();
    restarter.restart(new FailureHandler() {
        public Outcome handle(Throwable failure) {
            System.out.println("重启失败");
            return Outcome.ABORT;
        }
    });
    return  true;
}

导入依赖

org.springframework.boot
spring-boot-devtools
true

第二种方法

亲测可行,参考连接
https://duoduokou.com/java/50894250288586716926.html

这是我的后台启动类,在里面加了个重启的方法

package com.example.demo;

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;


@SpringBootApplication(scanBasePackages = "com.example.demo")
public class Demo1Application {
    private static ConfigurableApplicationContext context;

    public static void main(String[] args) {
        context = SpringApplication.run(Demo1Application.class, args);
    }
    public static void restart() {
        ApplicationArguments args = context.getBean(ApplicationArguments.class);

        Thread thread = new Thread(() -> {
            context.close();
            context = SpringApplication.run(Demo1Application.class, String.valueOf(args));
        });
        thread.setDaemon(false);
        thread.start();
    }
}

编写接口

@Controller
public class RestartController {

    @CrossOrigin
    @PostMapping(value="api/restart")
    @ResponseBody
    public boolean restart() {
        DemoApplication.restart();
        return true;
    }
}
### 宝塔面板 Vue 前端项目部署 401 错误解决方案 当在宝塔面板中部署Vue前端项目并遇到401未授权错误时,这通常是因为请求到达服务器时缺少必要的身份验证令牌(Token)。以下是详细的解决方案: #### 一、确认前后端分离架构中的认证机制 确保后端API服务已经配置好基于Token的身份验证逻辑。对于Spring Boot应用而言,在接收到HTTP请求时会检查`Authorization`头字段是否存在有效的JWT Token。 如果确实存在这样的安全策略,则需要让前端应用程序能够在每次发起Ajax调用之前自动附加此信息给目标URL对应的资源访问尝试[^3]。 #### 二、修改前端代码以发送Token 为了使Vue.js客户端能够携带正确的凭证信息与受保护的服务交互,可以在axios实例创建过程中全局设置默认参数来实现这一点。具体做法如下所示: ```javascript import axios from 'axios' // 创建一个新的 Axios 实例 const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, // API base_url }) service.interceptors.request.use( config => { const token = localStorage.getItem('token') || sessionStorage.getItem('token') if (token) { config.headers['Authorization'] = `Bearer ${token}`; } return config; }, error => Promise.reject(error) ) export default service ``` 这段JavaScript脚本定义了一个自定义的Axios HTTP客户端,并通过拦截器的方式为每一个即将发出的数据包添加上来自浏览器存储空间内的有效载荷——即用户的登录状态标识符(通常是JSON Web Tokens),从而满足了远程接口的安全性需求[^1]。 #### 三、调整Nginx反向代理配置 考虑到实际生产环境中往往还会涉及到跨域资源共享(CORS)的问题,因此建议同时优化Web服务器层面的相关设定。例如可以编辑位于宝塔面板里的站点配置文件(.conf),加入以下指令片段用于放宽同源政策限制的同时也允许附带Cookie/Credentials的信息传递: ```nginx location /api/ { proxy_pass http://localhost:8080/; add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods GET, POST, OPTIONS; add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization; # 如果需要支持凭据(如cookies), 则取消下一行前面的注释标记 #add_header Access-Control-Allow-Credentials true; } ``` 上述Nginx配置示例展示了如何针对特定路径前缀(`/api/*`)执行转发操作至后台运行的应用程序监听地址;与此同时还开放了一系列额外响应头部以便于处理不同类型的预检请求以及正式数据交换过程中的权限校验事项。 #### 四、测试更改后的效果 完成以上步骤之后重启所有涉及的服务组件,再次启动完整的构建流程重新编译打包静态网页资产(dist目录下的内容),最后将其上传更新到远端主机上的相应位置即可。此时应该可以看到经过改进后的系统行为表现正常不会再报错提示“Unauthorized”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

躺尸研究员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值