Oat++ 后端实现跨域

这里记录在官方的例子中,加入跨域。Oat++ Example-CRUD
在这里插入图片描述
在官方的例子中,加入跨域。
Oat++ Example-CRUD
在这里插入图片描述
修改AppComponent.hpp文件中的代码,如下:

#include "AppComponent.hpp"#include "controller/UserController.hpp"
#include "controller/StaticController.hpp"#include "oatpp-swagger/Controller.hpp"#include "oatpp/network/Server.hpp"
#include "oatpp/web/server/interceptor/RequestInterceptor.hpp"
#include "oatpp/web/server/interceptor/ResponseInterceptor.hpp"
#include "oatpp/web/protocol/http/outgoing/ResponseFactory.hpp"#include <iostream>class CORSInterceptor : public oatpp::web::server::interceptor::RequestInterceptor, public oatpp::web::server::interceptor::ResponseInterceptor {
public:std::shared_ptr<oatpp::web::protocol::http::outgoing::Response> intercept(const std::shared_ptr<oatpp::web::protocol::http::incoming::Request>& request) override {if (request->getStartingLine().method == "OPTIONS") {auto response = oatpp::web::protocol::http::outgoing::ResponseFactory::createResponse(oatpp::web::protocol::http::Status::CODE_200, nullptr);/*   response->putHeader("Access-Control-Allow-Origin", "*");*//*  response->putHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");response->putHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");*///response->putHeader("Access-Control-Max-Age", "3600"); // Cache preflight responsereturn response;}return nullptr;}std::shared_ptr<oatpp::web::protocol::http::outgoing::Response> intercept(const std::shared_ptr<oatpp::web::protocol::http::incoming::Request>& request, const std::shared_ptr<oatpp::web::protocol::http::outgoing::Response>& response) override {response->putHeader("Access-Control-Allow-Origin", "*");response->putHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");response->putHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");return response;}
};void run() {AppComponent components; // Create scope Environment components/* Get router component */OATPP_COMPONENT(std::shared_ptr<oatpp::web::server::HttpRouter>, router);/* Get connection handler component */OATPP_COMPONENT(std::shared_ptr<oatpp::network::ConnectionHandler>, connectionHandler);/* Create a CORSInterceptor instance */auto corsInterceptor = std::make_shared<CORSInterceptor>();/* Add CORSInterceptor to the connection handler */auto httpConnectionHandler = std::static_pointer_cast<oatpp::web::server::HttpConnectionHandler>(connectionHandler);httpConnectionHandler->addRequestInterceptor(corsInterceptor);httpConnectionHandler->addResponseInterceptor(corsInterceptor);oatpp::web::server::api::Endpoints docEndpoints;docEndpoints.append(router->addController(UserController::createShared())->getEndpoints());router->addController(oatpp::swagger::Controller::createShared(docEndpoints));router->addController(StaticController::createShared());/* Get connection provider component */OATPP_COMPONENT(std::shared_ptr<oatpp::network::ServerConnectionProvider>, connectionProvider);/* create server */oatpp::network::Server server(connectionProvider, connectionHandler);OATPP_LOGD("Server", "Running on port %s...", connectionProvider->getProperty("port").toString()->c_str());server.run();/* stop db connection pool */OATPP_COMPONENT(std::shared_ptr<oatpp::provider::Provider<oatpp::sqlite::Connection>>, dbConnectionProvider);dbConnectionProvider->stop();}/***  main*/
int main(int argc, const char* argv[]) {oatpp::base::Environment::init();run();/* Print how much objects were created during app running, and what have left-probably leaked *//* Disable object counting for release builds using '-D OATPP_DISABLE_ENV_OBJECT_COUNTERS' flag for better performance */std::cout << "\nEnvironment:\n";std::cout << "objectsCount = " << oatpp::base::Environment::getObjectsCount() << "\n";std::cout << "objectsCreated = " << oatpp::base::Environment::getObjectsCreated() << "\n\n";oatpp::base::Environment::destroy();return 0;
}


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

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

相关文章

服务器数据恢复—raid信息丢失导致RAID无法被识别的数据恢复案例

服务器数据恢复环境&故障&#xff1a; 某单位机房搬迁&#xff0c;将所有服务器和存储搬迁到新机房并重新连接线路&#xff0c;启动所有机器发现其中有一台服务器无法识别RAID&#xff0c;提示未做初始化操作。 发生故障的这台服务器安装LINUX操作系统&#xff0c;配置了NF…

【虚拟化】KVM概念和架构

目录 一、什么是KVM&#xff1f; 二、KVM的功能 2.1 主要的功能 2.2 其它功能 三、KVM核心组件及作用 四、KVM与VMware的优势 五、KVM架构 六、qemu介绍 七、创建虚拟机流程 一、什么是KVM&#xff1f; Kernel-based Virtual Machine的简称&#xff0c;KVM 是基于虚拟…

数字看板:跨行业需求下的创新与升级

在当今这个数据驱动的时代&#xff0c;数字看板作为信息展示与决策支持的重要工具&#xff0c;正逐步渗透到各行各业之中。从智慧城市到智能制造&#xff0c;从金融分析到医疗健康&#xff0c;数字看板以其直观、动态、高效的特点&#xff0c;成为了连接数据与决策者的桥梁。本…

代码的魔力:Jupyter Notebook从零开始的探索之旅

1. Jupyter Notebook&#xff1a;探索无限的可能 1.1 Jupyter Notebook的简介 Jupyter Notebook是一个开源的Web应用程序&#xff0c;让你能够创建和共享文档&#xff0c;这些文档可以包含实时代码、数学方程、可视化以及叙述性文本。其名字来源于它支持的三种核心编程语言&am…

【Linux】-----工具篇(自动化构建工具make/makefile)

目录 前言 一、是什么&#xff1f; 二、怎么样的&#xff1f; 三、原理及细节 图解代码 细节1&#xff1a;make工作规则 ①依赖文件存在 ②依赖文件不存在 ③依赖文件列表为空(特殊) .PHONY关键字 细节2&#xff1a;makefile识别程序需要重新编译&#xff1f; 四、…

【PyTorch】基于YOLO的多目标检测项目(二)

【PyTorch】基于YOLO的多目标检测项目&#xff08;一&#xff09; 【PyTorch】基于YOLO的多目标检测项目&#xff08;二&#xff09; YOLO-v3网络由跨距为2的卷积层、跳跃连接层和上采样层组成&#xff0c;没有池化层。网络接收一幅416 * 416的图像作为输入&#xff0c;并提供三…

pytest 测试框架中 setup、teardown 方法不生效

pytest 测试框架中 setup、teardown 方法不生效 源码有改动&#xff1a; 将 setup、teardown改为&#xff1a;setup_method、teardown_method 可生效 def setup_method(self):print("测试用例执行前的初始化,如&#xff1a;打开浏览器,加载网页...")def setup_class…

动手学深度学习V2每日笔记(模型选择+过拟合和欠拟合)

本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1K64y1Q7wu/?spm_id_from333.788.recommend_more_video.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&a…

算法日记day 20(中序后序遍历序列构造二叉树|最大、合并、搜索二叉树)

一、中序后序序列构造二叉树 题目&#xff1a; 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,…

自定义 RAG 工作流:在 IDE 中结合 RAG 编排,构建可信的编码智能体

构建编码智能体并非一件容易的事。结合我们在 AutoDev、ArchGuard Co-mate、ChocoBuilder 等智能体项目的经验&#xff0c;我们开始思考在 Shire 语言中提供一种新的 RAG 工作流。结合我们先前构建的 IDE 基础设施&#xff08;代码生成、代码校验、代码执行等接口&#xff09;&…

Linux下普通用户无法执行sudo指令

当执行sudo指令时出现&#xff1a; xxx&#xff08;普通用户名字&#xff09; is not in the sudoers file 说明在/etc/sudoers文件中没有把xxx加入到可执行sudo指令的名单中&#xff0c;因此需要修改sudoers文件。 解决方法&#xff1a;1、vim /etc/sudoers &#xff08;要…

idea启动项目报:the command line via JAR manifest or via a classpath file and rerun.

解决方案 1.打开Edit Configurations&#xff0c;进去编辑&#xff0c;如下&#xff1a; 笔记配置 2.选择Modfiy options,点击Shorten command line 3.在新增的Shorten command line选项中选择JAR manifest或classpath file 4.点击保存后即可

redis构建集群时,一直Waiting for the cluster to join

redis构建集群时&#xff0c;一直Waiting for the cluster to join 前置条件参考 前置条件 这是我搭建的集群相关信息&#xff0c;三台虚拟机&#xff0c;分别是一主一从。在将所有虚拟机中redis服务器用到的tcp端口都打开之后&#xff0c;进行构建集群。但是出现上面的情况。 …

RK平台瑞发科NS6601 MIPI CSI VC虚拟通道支持不同分辨率

需求&#xff1a;两路不同分辨率的摄像头&#xff0c;通过des后输入给一路MIPI CSI。在capture的时候&#xff0c;可以分别支持不同分辨率的capture动作。 设备树 &i2c2 {status "okay";pinctrl-names "default";pinctrl-0 <&i2c2m4_xfer&g…

快速介绍git(Linux)

git 1、安装2、版本控制3、git vs gitee&&GitHub(git故事)4、git的操作 1、安装 很简单&#xff0c;直接 sudo yum install -y git2、版本控制 故事介绍&#xff1a;你是一个大学生&#xff0c;你上课需要交一分实验报告&#xff0c;教你的老师比较负责&#xff0c;…

GAT知识总结

《GRAPH ATTENTION NETWORKS》 解决GNN聚合邻居节点的时候没有考虑到不同的邻居节点重要性不同的问题&#xff0c;GAT借鉴了Transformer的idea&#xff0c;引入masked self-attention机制&#xff0c; 在计算图中的每个节点的表示的时候&#xff0c;会根据邻居节点特征的不同来…

职升网:中级会计师考场常见的注意问题!

在中级会计师考试的征途中&#xff0c;考生常遇挑战&#xff0c;涵盖考前筹备、考场纪律及考后事宜等多维度。针对准考证信息误差&#xff0c;考生务必迅速联系属地会计考试管理机构进行更正&#xff0c;确保信息无误。若身份证不慎遗失或过期&#xff0c;务必紧急补办临时证件…

MyBatis 参数赋值:#{} 和 ${}及区别

目录 一. #{} 和${} 使用 1 对Interger类型的参数 2 对String类型的参数 二、#{} 和${} 区别 1.性能更好 2.SQL注入 总结 MyBatis 参数赋值有两种方式&#xff1a;#{} 和 ${} 一. #{} 和${} 使用 1 对Interger类型的参数 #{}&#xff1a; Select("select username, pas…

音视频入门基础:WAV专题(3)——FFmpeg源码中,判断某文件是否为WAV音频文件的实现

一、引言 通过FFmpeg命令&#xff1a; ./ffmpeg -i XXX.wav 可以判断出某个文件是否为WAV格式的音频文件&#xff1a; 所以FFmpeg是怎样判断出某个文件是否为WAV格式的音频文件呢&#xff1f;它内部其实是通过wav_probe函数来判断的。从文章《FFmpeg源码&#xff1a;av_prob…

uniapp 使用css实现大转盘

思路&#xff1a; 1.一个原型的外壳包裹 2.使用要分配的个数&#xff0c;计算出角度&#xff0c;利用正切函数tan计算出角度对应对边长度 3.使用clip-path画出一个扇形 4.使用v-for循环出对应的份数&#xff0c;依次使用transform rotate旋转对应的角度。 注意&#xff1a…