HTTPS erzwingen

Der force-https-Middleware kann alle Anfragen zwingen, auf das HTTPS-Protokoll umzuleiten.

Wenn diese Middleware auf einen Router angewendet wird, erfolgt die Protokollumleitung nur bei erfolgreicher Routenübereinstimmung. Falls die Seite nicht existiert, wird keine Umleitung durchgeführt.

Häufiger ist jedoch der Wunsch, dass alle Anfragen automatisch umgeleitet werden sollen – selbst wenn keine Route gefunden wird und ein 404-Fehler zurückgegeben wird. In diesem Fall kann die Middleware dem Service hinzugefügt werden. Middlewares, die auf Service-Ebene hinzugefügt werden, werden immer ausgeführt, unabhängig davon, ob die Anfrage erfolgreich einer Route zugeordnet wurde oder nicht.

Beispielcode

main.rs
Cargo.toml
force-https/src/main.rs
use salvo::conn::rustls::{Keycert, RustlsConfig};
use salvo::prelude::*;

#[handler]
async fn hello() -> &'static str {
    "Hello World"
}

#[tokio::main]
async fn main() {
    tracing_subscriber::fmt().init();

    let router = Router::new().get(hello);
    let service = Service::new(router).hoop(ForceHttps::new().https_port(5443));

    let config = RustlsConfig::new(
        Keycert::new()
            .cert(include_bytes!("../certs/cert.pem").as_ref())
            .key(include_bytes!("../certs/key.pem").as_ref()),
    );
    let acceptor = TcpListener::new("0.0.0.0:5443")
        .rustls(config)
        .join(TcpListener::new("0.0.0.0:5800"))
        .bind()
        .await;
    Server::new(acceptor).serve(service).await;
}