Oat++ 后端实现跨域

news/2024/9/23 2:35:31/

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

相关文章

Redis核心技术与实战学习笔记

Redis核心技术与实战学习笔记 最近想沉下心来看下redis&#xff0c;买了蒋德钧老师的《Redis 核心技术与实战》,这里记录一些学习笔记 希望能够坚持下去有想一起学习的童鞋&#xff0c;可以点击跳转到文章尾部获取学习资源,仅供学习不要用于任何商业用途!!! redis知识全景图 …

word转pdf图变得模糊(解决)

日常小记 目录问题解决方案 结语 目录 问题 word转pdf图变得模糊后图变得不清晰 解决方案 首先在ppt中进行画图其次复制该图的所有元素直接复制到word&#xff0c;在粘贴中选中选择性粘贴&#xff0c;增强性图形即可解决&#xff01;&#xff01;&#xff01; 其余方案 可以…

《昇思25天学习打卡营第25天|第28天》

今天是打卡的第二十八天&#xff0c;实践应用篇中的计算机视觉中Vision Transformer图像分类。 从Vision Transformer&#xff08;ViT&#xff09;简介开始了解&#xff0c;模型结构&#xff0c;模型特点&#xff0c;实验的环境准备和数据读取&#xff0c;模型解析&#xff08…

【个人笔记】一个例子理解工厂模式

工厂模式优点&#xff1a;创建时类名过长或者参数过多或者创建很麻烦等情况时用&#xff0c;可以减少重复代码&#xff0c;简化对象的创建过程&#xff0c;避免暴露创建逻辑&#xff0c;也适用于需要统一管理所有创建对象的情况&#xff0c;比如线程池的工厂类Executors 简单工…

C++学习笔记-基类、派生类与虚函数关系

在C的面向对象编程中&#xff0c;基类&#xff08;Base Class&#xff09;、派生类&#xff08;Derived Class&#xff09;以及虚函数&#xff08;Virtual Functions&#xff09;构成了多态性的基石。这三者之间的关系错综复杂而又紧密相连&#xff0c;它们共同支撑起C中复杂而…

划分型dp,CF 1935C - Messenger in MAC

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1935C - Messenger in MAC 二、解题报告 1、思路分析 比较简单的思路是反悔贪心&#xff0c;这里不展开说了&#xff0c;来说一下dp的做法 由于式子里面带绝对值&#xff0c;很烦&#xff0c;我们将pair按…

计算机毕业设计hadoop+spark+hive知识图谱股票推荐系统 股票数据分析可视化大屏 股票基金爬虫 股票基金大数据 机器学习 大数据毕业设计

目 录 摘 要 Abstract 第1章 前 言 1.1 项目的背景和意义 1.2 研究现状 1.3 项目的目标和范围 1.4 论文结构简介 第2章 技术与原理 2.1 开发原理 2.2 开发工具 2.3 关键技术 第3章 需求建模 3.1 系统可行性分析 3.2 功能需求分析 3.3 非功能性…

算法:动态规划,贪心算法和NP完全性

动态规划 动态规划算法与分治法类似&#xff0c;其基本思想也是将待求解问题分解成若干个子问题&#xff0c;但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时&#xff0c;有些子问题被重复计算了许多次。如果能够保存已解决的…