From 703d255efbe5922e423860ac63b8859879bb0e27 Mon Sep 17 00:00:00 2001 From: ch4mpy Date: Wed, 15 May 2024 15:25:19 -1000 Subject: [PATCH] gh-213 native images compatibility of @ConfigurationProperties --- README.MD | 8 +- release-notes.md | 5 + .../tutorials/WebSecurityConfig.java | 2 +- .../BasicAuthSecurityConfig.java | 2 +- spring-addons-starter-oidc/README.MD | 2 +- ...ssuerOpenidProviderPropertiesResolver.java | 2 +- ...figurableClaimSetAuthoritiesConverter.java | 94 +++++++------- .../OpenidProviderPropertiesResolver.java | 2 +- .../properties/OpenidProviderProperties.java | 48 ------- .../SimpleAuthoritiesMappingProperties.java | 38 ------ .../SpringAddonsOidcProperties.java | 118 ++++++++++++++---- ...bleJwtGrantedAuthoritiesConverterTest.java | 6 +- 12 files changed, 154 insertions(+), 173 deletions(-) delete mode 100644 spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/properties/OpenidProviderProperties.java delete mode 100644 spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/properties/SimpleAuthoritiesMappingProperties.java diff --git a/README.MD b/README.MD index 651348ec5..ad702276d 100644 --- a/README.MD +++ b/README.MD @@ -11,16 +11,10 @@ ## Breaking News -Just added a [Sponsor this project](https://ko-fi.com/ch4mpy) link to the repo ;-) +In `7.7.0`, some `@ConfigurationProperties` were changed to inner-class definition (instead of standing in a source file of their own). Migration should be no more complicated than organizing imports. The OAuth2 BFF tutorial is now [on Baeldung](https://www.baeldung.com/spring-cloud-gateway-bff-oauth2). It was deeply refreshed in the process and now contains samples for Angular, React (Next.js) and Vue (Vite). -In `7.6.0`, the experimental support for `RestClient` and `WebClient` builders as well as `@HttpExchange` (the successor of `@FeignClient`) is moved to a dedicated starter: [`spring-addons-starter-rest`](https://github.com/ch4mpy/spring-addons/tree/master/spring-addons-starter-rest). As a reminder, it helps to get pre-configured client builders and `@HttpExchange` proxies with this clients - -`7.5.0` comes with an important refactoring of the way JWT decoder(s) configuration is resolved. This greatly eases ["dynamic" multi-tenant scenarios implementation](https://github.com/ch4mpy/spring-addons/tree/master/spring-addons-starter-oidc#1-1-4). The only noticeable breaking change is the removal of `SpringAddonsOidcProperties::getOpProperties`. This feature is now the responsibility of the newly introduced `OpenidProviderPropertiesResolver`. The default implementation resolves properties with an exact match on issuer (just as `getOpProperties` was doing). As usual, auto-configured bean backs-off if you expose one to use another properties resolving strategy. - -**Important warning for those using `@WithJwt` (and since `7.3.0`, `@WithMockJwtAuth`) but not `spring-addons-starter-oidc`**: you should expose your JWT converter as a bean. See [`spring-addons-oauth2-test` README](https://github.com/ch4mpy/spring-addons/tree/master/spring-addons-oauth2-test) for details. - ## [OIDC starter](https://github.com/ch4mpy/spring-addons/tree/master/spring-addons-starter-oidc) With `spring-addons-starter-oidc`, you might need 0 Java conf, even in scenarios like: diff --git a/release-notes.md b/release-notes.md index fe7b079a9..2085a135e 100644 --- a/release-notes.md +++ b/release-notes.md @@ -2,6 +2,11 @@ ## `7.x` Branch +### `7.7.0` +- [gh-213](https://github.com/ch4mpy/spring-addons/issues/213): native-images compatibility: + - add missing `@NestedConfigurationProperty` to `SpringAddonsOidcProperties#client` and `SpringAddonsOidcProperties#resourceserver` + - declare all other `@ConfigurationProperty` as nested classes of either `SpringAddonsOidcProperties`, `SpringAddonsOidcClientProperties` or `SpringAddonsOidcResourceServerProperties` + ### `7.6.11` - Spring Boot `3.2.4` diff --git a/samples/tutorials/resource-server_multitenant_dynamic/src/main/java/com/c4soft/springaddons/tutorials/WebSecurityConfig.java b/samples/tutorials/resource-server_multitenant_dynamic/src/main/java/com/c4soft/springaddons/tutorials/WebSecurityConfig.java index d39315c10..f0c1e8371 100644 --- a/samples/tutorials/resource-server_multitenant_dynamic/src/main/java/com/c4soft/springaddons/tutorials/WebSecurityConfig.java +++ b/samples/tutorials/resource-server_multitenant_dynamic/src/main/java/com/c4soft/springaddons/tutorials/WebSecurityConfig.java @@ -11,8 +11,8 @@ import org.springframework.util.StringUtils; import com.c4_soft.springaddons.security.oidc.starter.OpenidProviderPropertiesResolver; -import com.c4_soft.springaddons.security.oidc.starter.properties.OpenidProviderProperties; import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcProperties; +import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcProperties.OpenidProviderProperties; @Configuration @EnableMethodSecurity diff --git a/samples/webmvc-jwt-default/src/main/java/com/c4_soft/springaddons/samples/webmvc_jwtauthenticationtoken/BasicAuthSecurityConfig.java b/samples/webmvc-jwt-default/src/main/java/com/c4_soft/springaddons/samples/webmvc_jwtauthenticationtoken/BasicAuthSecurityConfig.java index 50f16f7b8..f3ddc4419 100644 --- a/samples/webmvc-jwt-default/src/main/java/com/c4_soft/springaddons/samples/webmvc_jwtauthenticationtoken/BasicAuthSecurityConfig.java +++ b/samples/webmvc-jwt-default/src/main/java/com/c4_soft/springaddons/samples/webmvc_jwtauthenticationtoken/BasicAuthSecurityConfig.java @@ -36,8 +36,8 @@ import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.util.UriComponentsBuilder; -import com.c4_soft.springaddons.security.oidc.starter.properties.OpenidProviderProperties; import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcProperties; +import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcProperties.OpenidProviderProperties; import com.c4_soft.springaddons.security.oidc.starter.synchronised.ServletConfigurationSupport; import com.c4_soft.springaddons.security.oidc.starter.synchronised.resourceserver.ResourceServerExpressionInterceptUrlRegistryPostProcessor; import com.c4_soft.springaddons.security.oidc.starter.synchronised.resourceserver.ResourceServerSynchronizedHttpSecurityPostProcessor; diff --git a/spring-addons-starter-oidc/README.MD b/spring-addons-starter-oidc/README.MD index a94b20fb7..fdfce4cf8 100644 --- a/spring-addons-starter-oidc/README.MD +++ b/spring-addons-starter-oidc/README.MD @@ -4,7 +4,7 @@ This project is a Spring Boot starter to use in addition to `spring-boot-starter ```xml - 7.6.11 + 7.7.0 diff --git a/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/ByIssuerOpenidProviderPropertiesResolver.java b/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/ByIssuerOpenidProviderPropertiesResolver.java index 6681cf011..207692565 100644 --- a/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/ByIssuerOpenidProviderPropertiesResolver.java +++ b/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/ByIssuerOpenidProviderPropertiesResolver.java @@ -7,8 +7,8 @@ import org.springframework.security.oauth2.jwt.JwtClaimNames; -import com.c4_soft.springaddons.security.oidc.starter.properties.OpenidProviderProperties; import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcProperties; +import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcProperties.OpenidProviderProperties; import lombok.RequiredArgsConstructor; diff --git a/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/ConfigurableClaimSetAuthoritiesConverter.java b/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/ConfigurableClaimSetAuthoritiesConverter.java index f9075f142..214190cf6 100644 --- a/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/ConfigurableClaimSetAuthoritiesConverter.java +++ b/spring-addons-starter-oidc/src/main/java/com/c4_soft/springaddons/security/oidc/starter/ConfigurableClaimSetAuthoritiesConverter.java @@ -11,7 +11,7 @@ import org.springframework.util.StringUtils; import com.c4_soft.springaddons.security.oidc.starter.properties.NotAConfiguredOpenidProviderException; -import com.c4_soft.springaddons.security.oidc.starter.properties.SimpleAuthoritiesMappingProperties; +import com.c4_soft.springaddons.security.oidc.starter.properties.SpringAddonsOidcProperties.OpenidProviderProperties.SimpleAuthoritiesMappingProperties; import com.jayway.jsonpath.JsonPath; import com.jayway.jsonpath.PathNotFoundException; @@ -22,8 +22,8 @@ * Portable converter to extract Spring-security authorities from OAuth2 claims. *

*

- * It relies on {@link OpenidProviderPropertiesResolver} to resolve the configuration properties for the provided claims (and throws if it is not resolved). - * This properties enable to configure: + * It relies on {@link OpenidProviderPropertiesResolver} to resolve the configuration properties for the provided claims (and throws if it + * is not resolved). This properties enable to configure: *

*