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 agregar OpenApi/Swagger securitySchemes en RouteBuilder.restConfiguration() de Apache Camel?

Intento agregar springdoc-openapi-ui y camel-springdoc-starter. No funciona tan mal.
Por ahora tengo problemas con la ruta del contexto, /camel, y con la falta de securitySchemes.
¿Alguien tiene alguna idea de cómo hacer esto?

¿Cómo puedo obtener una configuración como esta?

{
“openapi”: “3.0.1”,
“info”: {
“title”: “some title”,
“version”: “0.8.15-SNAPSHOT”
},
“servers”: [
{
“url”: “http://localhost”
}
],
“security”: [
{
“Keycloak”: []
}
],
“components”: {
“schemas”: {

},
“securitySchemes”: {
“Keycloak”: {
“type”: “oauth2”,
“name”: “Keycloak”,
“flows”: {
“password”: {
“tokenUrl”: “http://localhost:8080/auth/realms/sample-app/protocol/openid-connect/token”,
“scopes”: {
“email”: “”,
“profile”: “”
}
}
}
}
}
}
}

Usando algo como esto:

@Override
public void configure() {
restConfiguration()
.component(“servlet”)
.apiProperty(“api.title”, “RDF-Pub Server”)
.apiProperty(“api.version”, appVersion)
.apiProperty(“api.components.securitySchemes.Keycloak.type”, “oauth2”)
.apiProperty(“api.components.securitySchemes.Keycloak.name”, “Keycloak”)
.apiProperty(“api.components.securitySchemes.Keycloak.flows.password.tokenUrl”, “http://localhost:8080/auth/realms/example-app/protocol/openid-connect/token”)
.apiProperty(“api.components.securitySchemes.Keycloak.flows.password.scopes.email”, “”)
.apiProperty(“api.components.securitySchemes.Keycloak.flows.password.scopes.profile”, “”);
}

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para configurar los securitySchemes y el context path para springdoc-openapi-ui y camel-springdoc-starter, puedes utilizar el siguiente código:

    @Configuration
    public class OpenApiConfiguration {
    
        @Value("${server.servlet.context-path:/}")
        private String contextPath;
    
        @Value("${springdoc.version}")
        private String appVersion;
    
        @Bean
        public OpenApiCustomiser customOpenApi() {
            return openApi -> openApi
                    .addSecurityItem(new SecurityRequirement().addList("keycloak"))
                    .components(new Components()
                            .addSecuritySchemes("keycloak", new SecurityScheme()
                                    .type(SecurityScheme.Type.OAUTH2)
                                    .name("Keycloak")
                                    .flows(new OAuthFlows()
                                            .password(new OAuthFlow()
                                                    .tokenUrl("http://localhost:8080/auth/realms/example-app/protocol/openid-connect/token")
                                                    .scopes(new Scopes()
                                                            .addString("email", "")
                                                            .addString("profile", "")
                                                    )
                                            )
                                    )
                            )
                    )
                    .servers(Collections.singletonList(new Server().url(contextPath)));
        }
    }
    

    Esta configuración establece el contextPath como / y agrega un SecurityScheme para Keycloak con tipo oauth2, que es utilizado por springdoc-openapi-ui y camel-springdoc-starter. También se configuran el tokenUrl y los ámbitos email y profile. Finalmente, se establece la versión de openApi y la URL de servers.

    Luego, puedes utilizar esta configuración en tu aplicación Camel de la siguiente manera:

    @Component
    public class MyCamelRoute extends RouteBuilder {
    
        @Override
        public void configure() {
            restConfiguration()
                    .component("servlet")
                    .apiContextPath("/api")
                    .apiProperty("springdoc.version", "0.8.15-SNAPSHOT")
                    .openApiCustomiser(new OpenApiConfiguration().customOpenApi());
            // Tus rutas Camel aquí
        }
    }
    

    Aquí, definimos el apiContextPath como /api y especificamos el openApiCustomiser para utilizar la configuración que definimos anteriormente. Puedes ajustar estos valores según tus necesidades específicas.

Comments are closed.