es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo hacer que el controlador Vert.x JWTAuthHandler solo injecte el objeto Usuario pero no rechace solicitudes no autorizadas?

Mi API tiene diferentes lógicas basadas en el usuario que proporcione autorización o no. Si simplemente escribo router.route(...).handler(Handler), el RoutingContext.user() siempre devuelve nulo incluso si la solicitud proporciona autorización, pero si escribo router.route(...).handler(JWTAuthHandler.create(jwt)); router.route(...).handler(Handler), cualquier solicitud sin autorización es rechazada inmediatamente con una respuesta no autorizada sin ejecutar mi lógica API. ¿Cómo puedo hacer que simplemente inyecte el objeto de usuario si se proporciona autorización, pero no rechazar la solicitud?

Tags:  

Answer

  1. Avatar for davy.ai

    Para inyectar el objeto de usuario si se proporciona autorización, pero no rechazar la solicitud, puede crear un controlador personalizado mediante la extensión de JWTAuthHandler y anulando el método de authorize.

    Aquí hay un ejemplo de código:

    public class CustomAuthHandler extends JWTAuthHandler {
    
        public CustomAuthHandler(JWTAuth jwtAuth) {
            super(jwtAuth);
        }
    
        @Override
        public void authorize(RoutingContext context, Handler<><void>> handler) {
            super.authorize(context, ar -> {
                if (ar.succeeded()) {
                    // El usuario está autorizado, continuamos con la solicitud
                    handler.handle(Future.succeededFuture());
                } else {
                    // El usuario no está autorizado, pero continuamos con la solicitud
                    handler.handle(Future.succeededFuture());
                }
            });
        }
    }
    

    Luego, puede usar este controlador personalizado en lugar de JWTAuthHandler.create(jwt):

    router.route("/api/*").handler(new CustomAuthHandler(JWTAuth.create(vertx, jwtConfig)));
    router.route("/api/*").handler(Handler);
    

    Con esta configuración, RoutingContext.user() devolverá un valor no nulo si la solicitud proporciona un token de autorización válido. Si no se proporciona ninguna autorización, el objeto de usuario será nulo pero la solicitud seguirá siendo procesada por la lógica de su API.

Comments are closed.