diff --git a/gradle.properties b/gradle.properties index 35e035c9..114df099 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,8 +1,8 @@ grpcVersion=1.76.0 -springBootVersion=3.5.7 -springCloudVersion=2025.0.0 +springBootVersion=4.0.0 +springCloudVersion=2025.1.0 gradleErrorPronePluginVersion=3.0.1 errorProneVersion=2.16 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fce403e4..e69d0402 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/grpc-spring-boot-starter-demo/build.gradle b/grpc-spring-boot-starter-demo/build.gradle index 5fd82226..323708f2 100644 --- a/grpc-spring-boot-starter-demo/build.gradle +++ b/grpc-spring-boot-starter-demo/build.gradle @@ -89,7 +89,7 @@ dependencies { implementation project(':grpc-spring-boot-starter') implementation project(':grpc-client-spring-boot-starter') - testImplementation 'org.springframework.boot:spring-boot-starter-aop' + testImplementation 'org.springframework.boot:spring-boot-starter-aop:4.0.0-M2' testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'com.github.stefanbirkner:system-rules:1.18.0' testImplementation('org.springframework.cloud:spring-cloud-starter-consul-discovery') diff --git a/grpc-spring-boot-starter/build.gradle b/grpc-spring-boot-starter/build.gradle index 5cc6dcd7..73d07e4a 100644 --- a/grpc-spring-boot-starter/build.gradle +++ b/grpc-spring-boot-starter/build.gradle @@ -226,6 +226,7 @@ dependencies { compileOnly("org.springframework.boot:spring-boot-starter-security") compileOnly "org.springframework.security:spring-security-oauth2-resource-server" compileOnly "org.springframework.security:spring-security-oauth2-jose" + compileOnly "org.springframework.security:spring-security-access" compileOnly 'org.springframework.boot:spring-boot-starter-validation' compileOnly "org.springframework.boot:spring-boot-starter-actuator" compileOnly "org.springframework.boot:spring-boot-starter-validation" diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/GRpcAutoConfiguration.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/GRpcAutoConfiguration.java index 279259d4..3951d6e7 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/GRpcAutoConfiguration.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/GRpcAutoConfiguration.java @@ -21,7 +21,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration; +import org.springframework.boot.validation.autoconfigure.ValidationAutoConfiguration; import org.springframework.boot.context.properties.ConfigurationPropertiesBindHandlerAdvisor; import org.springframework.boot.context.properties.ConfigurationPropertiesBinding; import org.springframework.boot.context.properties.bind.AbstractBindHandler; diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/actuate/GRpcActuateAutoConfiguration.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/actuate/GRpcActuateAutoConfiguration.java index f08e7df5..da6cc339 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/actuate/GRpcActuateAutoConfiguration.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/actuate/GRpcActuateAutoConfiguration.java @@ -14,18 +14,18 @@ import org.lognet.springboot.grpc.context.LocalRunningGrpcPort; import org.lognet.springboot.grpc.health.ManagedHealthStatusService; import org.springframework.boot.actuate.autoconfigure.endpoint.condition.ConditionalOnAvailableEndpoint; -import org.springframework.boot.actuate.autoconfigure.health.ConditionalOnEnabledHealthIndicator; import org.springframework.boot.actuate.endpoint.annotation.Endpoint; import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; -import org.springframework.boot.actuate.health.AbstractHealthIndicator; -import org.springframework.boot.actuate.health.CompositeHealthContributor; -import org.springframework.boot.actuate.health.Health; -import org.springframework.boot.actuate.health.HealthContributor; -import org.springframework.boot.actuate.health.HealthIndicator; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.health.autoconfigure.contributor.ConditionalOnEnabledHealthIndicator; +import org.springframework.boot.health.contributor.AbstractHealthIndicator; +import org.springframework.boot.health.contributor.CompositeHealthContributor; +import org.springframework.boot.health.contributor.Health; +import org.springframework.boot.health.contributor.HealthContributor; +import org.springframework.boot.health.contributor.HealthIndicator; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.EventListener; diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/consul/ServiceRegistrationMode.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/consul/ServiceRegistrationMode.java index 32c26545..f9837348 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/consul/ServiceRegistrationMode.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/consul/ServiceRegistrationMode.java @@ -1,11 +1,11 @@ package org.lognet.springboot.grpc.autoconfigure.consul; -import com.ecwid.consul.v1.agent.model.NewService; import io.grpc.Server; import io.grpc.ServerServiceDefinition; import io.grpc.health.v1.HealthGrpc; import org.lognet.springboot.grpc.autoconfigure.GRpcServerProperties; import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties; +import org.springframework.cloud.consul.model.http.agent.NewService; import org.springframework.cloud.consul.serviceregistry.ConsulAutoRegistration; import org.springframework.context.ApplicationContext; import org.springframework.util.CollectionUtils; diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/consul/ServiceRegistrationStrategy.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/consul/ServiceRegistrationStrategy.java index f454fe3f..ce6cb77a 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/consul/ServiceRegistrationStrategy.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/consul/ServiceRegistrationStrategy.java @@ -1,8 +1,8 @@ package org.lognet.springboot.grpc.autoconfigure.consul; import com.ecwid.consul.json.GsonFactory; -import com.ecwid.consul.v1.agent.model.NewService; import io.grpc.Server; +import org.springframework.cloud.consul.model.http.agent.NewService; import org.springframework.context.ApplicationContext; import java.util.Collection; diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/metrics/GRpcMetricsAutoConfiguration.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/metrics/GRpcMetricsAutoConfiguration.java index 6639e1d0..37f65507 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/metrics/GRpcMetricsAutoConfiguration.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/autoconfigure/metrics/GRpcMetricsAutoConfiguration.java @@ -22,8 +22,8 @@ import org.lognet.springboot.grpc.autoconfigure.GRpcAutoConfiguration; import org.lognet.springboot.grpc.autoconfigure.GRpcServerProperties; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.autoconfigure.metrics.CompositeMeterRegistryAutoConfiguration; -import org.springframework.boot.actuate.autoconfigure.metrics.MetricsAutoConfiguration; +import org.springframework.boot.micrometer.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration; +import org.springframework.boot.micrometer.metrics.autoconfigure.MetricsAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.AllNestedConditions; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/BearerTokenAuthSchemeSelector.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/BearerTokenAuthSchemeSelector.java index 3886812d..f38ecb65 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/BearerTokenAuthSchemeSelector.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/BearerTokenAuthSchemeSelector.java @@ -2,8 +2,8 @@ import org.springframework.security.core.Authentication; import org.springframework.security.oauth2.core.OAuth2AuthenticationException; -import org.springframework.security.oauth2.server.resource.BearerTokenAuthenticationToken; import org.springframework.security.oauth2.server.resource.BearerTokenError; +import org.springframework.security.oauth2.server.resource.authentication.BearerTokenAuthenticationToken; import java.util.Optional; import java.util.regex.Matcher; diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurity.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurity.java index 75ac9312..594a71fc 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurity.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurity.java @@ -45,8 +45,7 @@ public GrpcSecurity(ObjectPostProcessor objectPostProcessor) { } - public GrpcServiceAuthorizationConfigurer.Registry authorizeRequests() - throws Exception { + public GrpcServiceAuthorizationConfigurer.Registry authorizeRequests() { return getOrApply(new GrpcServiceAuthorizationConfigurer (applicationContext.getBean(GRpcServicesRegistry.class))) .getRegistry(); @@ -77,12 +76,12 @@ public GrpcSecurity authenticationProvider(AuthenticationProvider authentication } @Override - protected void beforeConfigure() throws Exception { + protected void beforeConfigure() { } @Override - protected ServerInterceptor performBuild() throws Exception { + protected ServerInterceptor performBuild() { @@ -132,7 +131,7 @@ public int vote(Authentication authentication, MethodInvocation method, Collecti return securityInterceptor; } @SuppressWarnings("unchecked") - private > C getOrApply(C configurer) throws Exception { + private > C getOrApply(C configurer) { C existingConfig = (C) getConfigurer(configurer.getClass()); if (existingConfig != null) { return existingConfig; diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurityConfiguration.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurityConfiguration.java index 5b2dde8d..883ce69d 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurityConfiguration.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurityConfiguration.java @@ -19,9 +19,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration; +import org.springframework.boot.security.autoconfigure.UserDetailsServiceAutoConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.security.access.AccessDeniedException; import org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor; import org.springframework.security.authentication.AuthenticationManager; @@ -141,7 +142,8 @@ public BearerTokenAuthSchemeSelector bearerTokenAuthSchemeSelector() { @ConditionalOnBean(ObjectPostProcessor.class) @ConditionalOnMissingBean(value = { AuthenticationManager.class, AuthenticationProvider.class, UserDetailsService.class, AuthenticationManagerResolver.class }, type = "org.springframework.security.oauth2.jwt.JwtDecoder") - static class DefaultUserDetailsServiceAutoConfiguration extends UserDetailsServiceAutoConfiguration {} + @Import(UserDetailsServiceAutoConfiguration.class) + static class DefaultUserDetailsServiceAutoConfiguration {} @Autowired(required = false) @SuppressWarnings({ "rawtypes", "unchecked" }) diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurityConfigurerAdapter.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurityConfigurerAdapter.java index c17f7e12..10ff63e5 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurityConfigurerAdapter.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcSecurityConfigurerAdapter.java @@ -37,7 +37,7 @@ public void setApplicationContext(ApplicationContext context) throws Exception { } @Override - public void init(GrpcSecurity builder) throws Exception { + public void init(GrpcSecurity builder) { builder.apply(new GrpcServiceAuthorizationConfigurer(builder.getApplicationContext().getBean(GRpcServicesRegistry.class))); builder.setSharedObject(AuthenticationManagerBuilder.class, authenticationManagerBuilder); final AuthenticationSchemeService authenticationSchemeService = new AuthenticationSchemeService(); @@ -54,7 +54,7 @@ public void init(GrpcSecurity builder) throws Exception { @Override - public void configure(GrpcSecurity builder) throws Exception { + public void configure(GrpcSecurity builder) { try { final Class jwtDecoderClass = Class.forName("org.springframework.security.oauth2.jwt.JwtDecoder"); final String[] beanNames = context.getBeanNamesForType(jwtDecoderClass); diff --git a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcServiceAuthorizationConfigurer.java b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcServiceAuthorizationConfigurer.java index 8523f5aa..c5387fca 100644 --- a/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcServiceAuthorizationConfigurer.java +++ b/grpc-spring-boot-starter/src/main/java/org/lognet/springboot/grpc/security/GrpcServiceAuthorizationConfigurer.java @@ -30,7 +30,7 @@ public Registry getRegistry() { } @Override - public void configure(GrpcSecurity builder) throws Exception { + public void configure(GrpcSecurity builder) { registry.processSecuredAnnotation(); builder.setSharedObject(GrpcSecurityMetadataSource.class, new GrpcSecurityMetadataSource(registry.servicesRegistry, registry.securedMethods)); } @@ -221,7 +221,7 @@ void map(String attribute, List> methods) { } public GrpcSecurity and() { - return GrpcServiceAuthorizationConfigurer.this.and(); + return GrpcServiceAuthorizationConfigurer.this.getBuilder(); } } }