CORS (Cross-Origin Resource Sharing) - это механизм, который позволяет серверу указывать, какие ресурсы на нём будут доступны для запросов с других доменов. В контексте Reactor Netty, который является фреймворком для разработки серверов на языке Java, CORS можно реализовать следующим образом:
1. Создайте класс, который будет отвечать за настройку CORS.
import io.netty.handler.codec.http.HttpMethod; import reactor.netty.http.server.HttpServer; import reactor.netty.http.server.HttpServerRequest; import reactor.netty.http.server.HttpServerResponse; import reactor.netty.http.server.HttpServerRoutes; import reactor.netty.http.server.HttpServerRequest; import reactor.netty.http.server.HttpServerResponse; import reactor.netty.http.server.HttpServerRequest; import reactor.netty.http.server.HttpServerResponse; public class CorsConfig { public static void main(String[] args) { HttpServer.create() .route(routes -> routes .get("/api/data", CorsConfig::handleDataRequest)) .bindNow() .onDispose() .block(); } private static void handleDataRequest(HttpServerRequest request, HttpServerResponse response) { // проверяем тип запроса if (request.method() == HttpMethod.OPTIONS) { // задаем разрешенные методы и заголовки response.headers().add("Access-Control-Allow-Methods", "GET"); response.headers().add("Access-Control-Allow-Headers", "Content-Type, Authorization"); // задаем максимальное время жизни предзапроса response.headers().add("Access-Control-Max-Age", "3600"); // возвращаем успешный ответ response.send(); } else { // задаем разрешенные домены response.headers().add("Access-Control-Allow-Origin", "http://example.com"); // возвращаем данные response.sendString(Mono.just("Data response")); } } }
2. Запустите HTTP-сервер и обрабатывайте запросы.
import reactor.netty.http.server.HttpServer; public class Main { public static void main(String[] args) { HttpServer.create() .route(routes -> routes .get("/api/data", CorsConfig::handleDataRequest)) .bindNow() .onDispose() .block(); } private static void handleDataRequest(HttpServerRequest request, HttpServerResponse response) { // проверяем тип запроса if (request.method() == HttpMethod.OPTIONS) { // задаем разрешенные методы и заголовки response.headers().add("Access-Control-Allow-Methods", "GET"); response.headers().add("Access-Control-Allow-Headers", "Content-Type, Authorization"); // задаем максимальное время жизни предзапроса response.headers().add("Access-Control-Max-Age", "3600"); // возвращаем успешный ответ response.send(); } else { // задаем разрешенные домены response.headers().add("Access-Control-Allow-Origin", "http://example.com"); // возвращаем данные response.sendString(Mono.just("Data response")); } } }
В данном примере мы создали HTTP-сервер с помощью Reactor Netty и определили обработчик для запроса на URL /api/data
. В методе handleDataRequest
мы проверяем тип запроса: если это предзапрос (OPTIONS), то задаем разрешенные методы и заголовки, а также максимальное время жизни предзапроса. Если это запрос GET, то задаем разрешенные домены и возвращаем данные.