diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/KeycloakJsonSettingConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/KeycloakJsonSettingConfig.java new file mode 100644 index 000000000..d2b2f950e --- /dev/null +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/KeycloakJsonSettingConfig.java @@ -0,0 +1,34 @@ +package ru.spcex.clearing.backendapi.security; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.keycloak.adapters.KeycloakConfigResolver; +import org.keycloak.adapters.KeycloakDeployment; +import org.keycloak.adapters.KeycloakDeploymentBuilder; +import org.keycloak.adapters.springsecurity.config.KeycloakSpringConfigResolverWrapper; +import org.keycloak.representations.adapters.config.AdapterConfig; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; + +import java.io.IOException; + +@Configuration +public class KeycloakJsonSettingConfig { + private final Resource keycloakJson; + + public KeycloakJsonSettingConfig() { + this.keycloakJson = new ClassPathResource("keycloak.json"); + if (!this.keycloakJson.exists()) { + throw new IllegalStateException("cannot find keycloak configuration"); + } + } + + @Bean + public KeycloakConfigResolver keycloakConfigResolver() throws IOException { + ObjectMapper json = new ObjectMapper(); + AdapterConfig adapterConfig = json.readValue(keycloakJson.getFile(), AdapterConfig.class); + KeycloakDeployment build = KeycloakDeploymentBuilder.build(adapterConfig); + return new KeycloakSpringConfigResolverWrapper(facade -> build); + } +} diff --git a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/WebSecurityConfig.java b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/WebSecurityConfig.java index 3726994ea..bd84f2db7 100644 --- a/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/WebSecurityConfig.java +++ b/clearing-parent/backend-api/src/main/java/ru/spcex/clearing/backendapi/security/WebSecurityConfig.java @@ -1,12 +1,9 @@ package ru.spcex.clearing.backendapi.security; -import org.keycloak.adapters.KeycloakConfigResolver; import org.keycloak.adapters.springsecurity.KeycloakConfiguration; import org.keycloak.adapters.springsecurity.authentication.KeycloakAuthenticationProvider; import org.keycloak.adapters.springsecurity.config.KeycloakWebSecurityConfigurerAdapter; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Primary; import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder; import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -30,16 +27,6 @@ public class WebSecurityConfig extends KeycloakWebSecurityConfigurerAdapter { authManagerBuilder.authenticationProvider(keycloakAuthenticationProvider); } - /** - * чтобы переместить настройки keycloak в keycloak.json вместо application.properties - * если будут проблемы, реализовать {@link KeycloakConfigResolver} считывая JSON из keycloak.json - */ - @Primary - @Bean - public KeycloakConfigResolver keycloakConfigResolver() { - return null; - } - @Override protected void configure(HttpSecurity http) throws Exception { super.configure(http);