Как добавить схемы безопасности OpenApi / Swagger в Apache Camels RouteBuilder.restConfiguration ()?

Я пытаюсь добавить springdoc-openapi-ui и camel-springdoc-starter. Работает не так уж и плохо.
На данный момент у меня проблемы с контекстным путем '/camel' и с отсутствующим securitySchemes.
Есть ли у кого-нибудь идеи, как это сделать

Как мне получить такую ​​конфигурацию?

      {
    "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": ""
                        }
                    }
                }
            }
        }
    }
}

Используя что-то вроде этого:

      @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", "");
}

1 ответ

нашел так:

      private void routeCollection() {
    rest()
        .securityDefinitions()
            .oauth2("local_keycloak", "Using a local keycloak instance")                
                .password("http://localhost:8080/auth/realms/sample-app/protocol/openid-connect/token")
                .withScope("email", "accessing the email address")
                .withScope("profile", "accessing the profile")
                .end()              
            .end()
        .get("/{owner}/{collection}")       
        .route()
        .routeId("readCollection")
        .process("processorA")
        .process("processorB")
        .endRest();
}

Я извлек материал методом:

      private RestDefinition oauth2Rest() {
    return rest()
        .securityDefinitions()
            .oauth2("local_keycloak", "Using a local keycloak instance")                
                .password("http://localhost:8080/auth/realms/sample-app/protocol/openid-connect/token")
                .withScope("email", "accessing the email address")
                .withScope("profile", "accessing the profile")
                .end()              
            .end();
}

и вызвал его один раз в конфигурации:

      @Override
public void configure() {
            
    oauth2Rest();
    // it tells Camel how to configure the REST service
    restConfiguration()
    ...

Результат:

Другие вопросы по тегам