Forçar HTTPS
O middleware force-https
pode redirecionar todas as solicitações para usar o protocolo HTTPS.
Se este middleware for aplicado a um Router
, a conversão do protocolo só será forçada quando a rota for correspondida. Caso a página não exista, não haverá redirecionamento.
No entanto, é mais comum querer que qualquer solicitação seja redirecionada automaticamente, mesmo quando a rota não é encontrada e retorna um erro 404
. Nesse caso, o middleware pode ser adicionado ao Service
. Independentemente de a solicitação corresponder a uma rota com sucesso, os middlewares adicionados ao Service
sempre serão executados.
Código de Exemplo
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;
}