diff --git a/spring-grpc-core/src/main/java/org/springframework/grpc/server/service/GrpcServiceDiscoverer.java b/spring-grpc-core/src/main/java/org/springframework/grpc/server/service/GrpcServiceDiscoverer.java index d9cb5e3d..47bed3b7 100644 --- a/spring-grpc-core/src/main/java/org/springframework/grpc/server/service/GrpcServiceDiscoverer.java +++ b/spring-grpc-core/src/main/java/org/springframework/grpc/server/service/GrpcServiceDiscoverer.java @@ -35,4 +35,27 @@ public interface GrpcServiceDiscoverer { */ List findServices(); + /** + * Find gRPC service names. + * @return list of service names - empty when no services available + */ + default List listServiceNames() { + return findServices().stream() + .map(ServerServiceDefinition::getServiceDescriptor) + .map(descriptor -> descriptor.getName()) + .toList(); + } + + /** + * Find gRPC service. + * @param name the service name + * @return a service - null if no service has this name + */ + default ServerServiceDefinition findService(String name) { + return findServices().stream() + .filter(service -> service.getServiceDescriptor().getName().equals(name)) + .findFirst() + .orElse(null); + } + } diff --git a/spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/GrpcServerFactoryAutoConfiguration.java b/spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/GrpcServerFactoryAutoConfiguration.java index cbed6c8b..337bb012 100644 --- a/spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/GrpcServerFactoryAutoConfiguration.java +++ b/spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/GrpcServerFactoryAutoConfiguration.java @@ -80,12 +80,12 @@ static class GrpcServletConfiguration { @Bean public ServletRegistrationBean grpcServlet(GrpcServerProperties properties, GrpcServiceDiscoverer discoverer, ServerBuilderCustomizers serverBuilderCustomizers) { - List services = discoverer.findServices(); - List paths = services.stream() - .map(service -> "/" + service.getServiceDescriptor().getName() + "/*") + List paths = discoverer.listServiceNames() + .stream() + .map(service -> "/" + service + "/*") .collect(Collectors.toList()); ServletServerBuilder servletServerBuilder = new ServletServerBuilder(); - services.forEach(servletServerBuilder::addService); + discoverer.findServices().forEach(servletServerBuilder::addService); PropertyMapper mapper = PropertyMapper.get().alwaysApplyingWhenNonNull(); mapper.from(properties.getMaxInboundMessageSize()) .asInt(DataSize::toBytes) diff --git a/spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/security/GrpcServletRequest.java b/spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/security/GrpcServletRequest.java index c6bf41ac..6b44daae 100644 --- a/spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/security/GrpcServletRequest.java +++ b/spring-grpc-spring-boot-autoconfigure/src/main/java/org/springframework/grpc/autoconfigure/server/security/GrpcServletRequest.java @@ -107,11 +107,10 @@ private Stream getDelegateMatchers(GrpcServiceDiscoverer context } private Stream getPatterns(GrpcServiceDiscoverer context) { - return context.findServices() + return context.listServiceNames() .stream() - .filter(service -> !this.exclusions.stream() - .anyMatch(type -> type.equals(service.getServiceDescriptor().getName()))) - .map(service -> "/" + service.getServiceDescriptor().getName() + "/**"); + .filter(service -> !this.exclusions.stream().anyMatch(type -> type.equals(service))) + .map(service -> "/" + service + "/**"); } @Override