Микросервис Spring Cloud с брелоком - PullRequest
1 голос
/ 20 марта 2020

У меня есть проект весенних облачных микросервисов, который использует Spring Cloud Config Server для управления конфигурациями и Eureka Server для обнаружения сервисов.

Мое приложение работало отлично, пока я не хотел добавить новый микросервис с keycloak. Этот новый микросервис - просто API отдыха для моего Vue внешнего интерфейса, и ожидается, что управление пользовательским интерфейсом будет обрабатываться Keycloak.

Новый сервис работает нормально и регистрируется в Eureka до I добавить зависимости keycloak в проект. Приложение не обрабатывает sh и не выдает никаких ошибок, запускается нормально и регистрируется в Eureka, но на панели сервера Spring Boot Admin я вижу, что приложение не работает.

Вот мой файл .properties для нового service.

eureka.instance.preferIpAddress=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka
eureka.instance.leaseRenewalIntervalInSeconds=3
eureka.client.eureka-connection-idle-timeout-seconds=3
eureka.client.fetchRegistry=true

spring.boot.admin.client.url=http://localhost:6060
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always

server.port=8082

keycloak.auth-server-url=http://localhost:8080/auth
keycloak.realm=microservices
keycloak.resource=microservices-app
keycloak.public-client=true

keycloak.security-constraints[0].authRoles[0]=user
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/*
keycloak.cors=true

Вот мои зависимости для нового сервиса.

...
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.thymeleaf</groupId>
                <artifactId>thymeleaf</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.keycloak</groupId>
        <artifactId>keycloak-spring-boot-starter</artifactId>
        <version>4.8.3.Final</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-openfeign</artifactId>
    </dependency>
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.keycloak.bom</groupId>
            <artifactId>keycloak-adapter-bom</artifactId>
            <version>4.8.3.Final</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

Версия Spring Cloud Hoxton.SR1

Версия Spring Spring 2.2.2.RELEASE

Я пытался добавить Spring Security и создавать java конфигурации с использованием KeycloakAuthenticationProvider, но это не помогло.

В этом проекте у меня было много странных ошибок, вызванных версией Spring Cloud или Spring Cloud -Взаимодействие Spring Boot с администратором, поэтому изменение версии или добавление одного небольшого параметра в файлы конфигурации обычно помогало, я подозреваю, что эта проблема с Keycloak будет решена аналогичным образом.

1 Ответ

2 голосов
/ 22 марта 2020

Spring Boot Admin использует конечные точки привода, попробуйте сделать их незащищенными:

    keycloak.security-constraints[0].authRoles[0]=user
    keycloak.security-constraints[0].securityCollections[0].patterns[0]=/*
    keycloak.security-constraints[0].securityCollections[1].patterns[0]=/actuator
    keycloak.security-constraints[0].securityCollections[1].patterns[1]=/actuator/*
...