Heim >Java >Wie implementiert man CORS in Reactor Netty?

Wie implementiert man CORS in Reactor Netty?

王林
王林nach vorne
2024-02-05 11:57:51820Durchsuche
Frageninhalt

Wie Sie wissen, beinhaltet der CORS-Standard zunächst das Senden von Optionsanfragen, um die Gültigkeit zu überprüfen. Ich habe beschlossen, die Verarbeitung von Optionsanfragen im Handler freizugeben, aber es gibt ein Problem bei der Rückgabe boolescher Werte und nur bei der Verarbeitung von Optionsanfragen. und den Rest im Runon überspringen, kennen Sie vielleicht andere Möglichkeiten, mit CORS-Helferanfragen umzugehen?

public void run() {
    HttpServer.create()
            .host(this.config.getHost())
            .port(this.config.getPort())
            .runOn(eventLoopGroup.newEventLoopGroup())
            .protocol(HttpProtocol.HTTP11)
            .handle((request, response) -> {
                if (request.method().equals(HttpMethod.OPTIONS)) 
                    return response
                        .header("Access-Control-Allow-Origin", "*")
                        .header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE")
                        .header("Access-Control-Allow-Headers", "Content-Type, Authorization")
                        .sendHeaders();
                else 
                    ???????
            })
            .route(this.provider::run)
            .bindUntilJavaShutdown(Duration.ofSeconds(30), this::onStart);
}

richtige Antwort


falls jemand plötzlich etwas braucht

private @notnull corsconfig getcorsconfig() {
    return corsconfigbuilder.foranyorigin()
            .allownullorigin()
            .allowcredentials()
            .allowedrequestmethods(httpmethod.get, httpmethod.post, httpmethod.delete, httpmethod.put, httpmethod.patch)
            .allowedrequestheaders("content-type", "authorization")
            .build();
}

public void run() {
    httpserver.create()
            .host(this.config.gethost())
            .port(this.config.getport())
            .protocol(httpprotocol.http11)
            .doonconnection(this::handler)
            .route(this.provider::run)
            .binduntiljavashutdown(duration.ofseconds(30), this::onstart);
}

private void addhandler() {
    this.connection.addhandlerlast(new corshandler(getcorsconfig()));
}

Versuchen Sie, handle() wie folgt zu ersetzen, um einen http-Server zu erstellen, der Ihr Problem lösen sollte:

public void run() throws IOException {
    CorsConfig corsConfig = CorsConfigBuilder.forAnyOrigin().disable().build();

    HttpServer.create()
            .host(this.config.getHost())
            .port(this.config.getPort())
            .runOn(eventLoopGroup.newEventLoopGroup())
            .protocol(HttpProtocol.HTTP11)
            .handle(corsConfig)
            .route(this.provider::run)
            .bindUntilJavaShutdown(Duration.ofSeconds(30), this::onStart);
}

Weitere Details zu dieser Konfiguration finden Sie unter: https://www.php.cn/link/e2a23af417a2344fe3a23e652924091f

Das obige ist der detaillierte Inhalt vonWie implementiert man CORS in Reactor Netty?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen