#spring-boot
#пружинный ботинок
Вопрос:
Итак, я использую keycloak для своего приложения, и у меня есть некоторые значения, application.properties
подобные:
keycloak.auth-server-url = http://10.10.10.10:1010/auth
keycloak.resource = test-client
keycloak.credentials.secret = <very-big-secret>
keycloak.realm = test-realm
Spring настраивает соединение keycloak, используя эти данные, но я также использую их в своем коде, поэтому у меня есть такая конфигурация:
@Data
@Configuration
@ConfigurationProperties(prefix = "keycloak")
public class KeycloakConfig {
private String authServerUrl;
private String realm;
private String resource;
private Credentials credentials;
}
У меня есть пользователь-администратор в keycloak, и я хочу, чтобы его учетные данные были указаны в application.properties следующим образом:
keycloak.admin.username=admin.admin
keycloak.admin.password=changeit
Итак, я попытался изменить свой класс конфигурации на этот:
@Data
@Configuration
@ConfigurationProperties(prefix = "keycloak")
public class KeycloakConfig {
private String authServerUrl;
private String realm;
private String resource;
private Credentials credentials;
private Admin admin;
}
@Data
public class Admin {
private String username;
private String password;
}
Но когда я пытаюсь запустить приложение таким образом, я думаю, что spring пытается установить значения для keycloak (часть .admin), и оно не запускается:
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target [Bindable@1cd5e41 type = org.keycloak.adapters.springboot.KeycloakSpringBootProperties, value = 'provided', annotations = array<Annotation>[@org.springframework.boot.context.properties.ConfigurationProperties(ignoreInvalidFields=false, ignoreUnknownFields=false, prefix=keycloak, value=keycloak)]] failed:
Property: keycloak.admin.password
Value: changeit
Origin: "keycloak.admin.password" from property source "applicationConfig: [classpath:/application.properties]"
Reason: The elements [keycloak.admin.password,keycloak.admin.username] were left unbound.
Property: keycloak.admin.username
Value: admin.admin
Origin: "keycloak.admin.username" from property source "applicationConfig: [classpath:/application.properties]"
Reason: The elements [keycloak.admin.password,keycloak.admin.username] were left unbound.
Action:
Update your application's configuration
Возможно ли, чтобы .admin
часть keycloak
была включена, или мне нужно создать новый класс, например:
@Data
@Configuration
@ConfigurationProperties(prefix = "my-keycloak")
public class MyKeycloakConfig {
private Admin admin;
}
И:
my-keycloak.admin.username=admin.admin
my-keycloak.admin.password=changeit
Ответ №1:
Я не знаком с KeyCloak, но вы можете ввести компонент, инициализированный KeyCloak, который считывает свойства.
Ответ №2:
Keycloak считывает значения из свойств приложения, используя KeycloakSpringBootProperties. Похоже, что таких значений, как имя пользователя или пароль, нет. Вероятно, Keycloak не требует, чтобы эти значения работали должным образом.
Итак, вам нужно указать свойства отдельно от keycloak.
Ответ №3:
- Нет, вы не можете настроить
keycloak.*
«домен» в свойствах spring-boot (загруженных)! Доказательство: KeycloakSpringBootProperties, в котором говорится:@ConfigurationProperties(prefix = "keycloak", ignoreUnknownFields = false)
- Так что это определенно второй подход!
Определяя (в application.properties):my-keycloak.admin.username=admin.admin my-keycloak.admin.password=changeit
a)… Вы можете просто выбрать:
@Value("${my-keycloak.admin.xxx}") private String myKeacloakXXX;
б) Или как описано в свойствах конфигурации Typesafe (и реализовано [1] для
prefix="keycloak"
):- Вам (просто) нужно ввести «pojo», например (изображающий структуру ваших свойств (безопасный тип)):
@ConfigurationProperties("my-keycloak.admin") public class MyKeykloakProperties { private String username, password; // getter, setter/lombok }
У вас может быть также больше структуры с
"my-keykloak"
(префикс и вложенные классы / свойства, см. exmaple / doc) - Чтобы включить их:
@Configuration // Or: @EnableConfigurationProperties(MyKeykloakProperties.class) // OR: //@ConfigurationPropertiesScan({ "com.example.app", "com.example.another" }) public class MyKeycloakConfig { ...
см. Также Включение.
- Затем вы можете «подключить» их по своему усмотрению (также в приведенном выше классе конфигурации):
@Autowired private MyKeykloakProperties properties;
В качестве справки о принятии решения, пожалуйста, обратитесь к:
@Value
vs type safe . - Вам (просто) нужно ввести «pojo», например (изображающий структуру ваших свойств (безопасный тип)):
Приветствия