v1.35.0
January 7, 2026
🌟 New features
- Dynamic Athenz Resource Resolution: You can now determine the target resource for Athenz authorization
dynamically from the request using
AthenzResourceProvider. #6541// Example 1: Use the request path
sb.decorator("/admin/users",
AthenzService
.builder(ztsBaseClient)
.action("read")
.resourceProvider(
AthenzResourceProvider.ofPath()) // 👈👈👈
.newDecorator());
// Example 2: Extract the resource from an HTTP header
sb.decorator("/api/resources",
AthenzService
.builder(ztsBaseClient)
.action("write")
.resourceProvider(AthenzResourceProvider.ofHeader(
"X-Resource-Id")) // 👈👈👈
.newDecorator()); - Per-Request Client TLS Configuration: You can now specify
ClientTlsSpecfor each request usingRequestOptions.clientTlsSpec()orClientRequestContext.clientTlsSpec(). #6551 - Nested Context Paths: You can now use nested context paths to organize your service routes more effectively. #5758 #5846
Server.builder()
.contextPath("/rest", rest -> {
rest.contextPath("catalog", catalog -> { // 👈👈👈
// Bind to /rest/catalog/product
catalog.service("/product", new ProductService());
});
}); - WebSocket Stream Timeout: You can now set
streamTimeoutoption toWebSocketServiceandWebSocketClient. #6357
// Server-side
WebSocketService.builder(myWebSocketHandler)
.streamTimeout(Duration.ofMinutes(1)) // 👈👈👈
.build();
// Client-side
WebSocketClient.builder(url)
.streamTimeout(Duration.ofMinutes(1)) // 👈👈👈
.build();
- Athenz Spring Integration Enhancements: You can now customize metrics configuration. #6566
- You can customize
ZtsBaseClientviaConsumer<ZtsBaseClientBuilder>.
- You can customize
- RequestLogListener: You can now use
RequestLogListenerto observe allRequestLogevents. #6543 - Connection Pool Ping Events:
ConnectionPoolListenernow supports ping-related events. #6539 #6552 - DocService UI Customization: You can now customize the appearance of
DocService, including the title, header background color, and button colors. #6235
📈 Improvements
- Metrics specific to
ResourceNodeare now exported. #6557 DefaultXdsLoadBalancerLifecycleObservernow records metrics forXdsLoadBalancersby default. #6490- You can now observe the behavior of
ConfigSourceClientvia metrics. #6488 SslContextFactoryandServerTlsSpecare now used to createSslContexts for the server-side. #6550- Refactored internal logic to facilitate per-request TLS configurations. #6542
🛠️ Bug fixes
Routenow properly rejects paths with query strings to avoid incorrect routing behavior. #5054 #6546AbstractEndpointSelectornow auto-initializes to prevent user-side implementation errors. #6535- Resolved inconsistencies in SNI determination behavior. #6522
☢️ Breaking changes
- A subclass of
AbstractEndpointSelectormust implementAbstractEndpointSelector.doSelectNow()instead ofAbstractEndpointSelector.selectNow(), which is now a final method. #6535
⛓ Dependencies
- Athenz 1.12.29 → 1.12.31
- Bouncy Castle 1.82 → 1.83
- gRPC-Java 1.77.0 → 1.78.0
- Logback 1.5.21 → 1.5.23
- Micrometer 1.16.0 → 1.16.1
- Micrometer Context Propagation 0.15.0 → 0.17.0
- Reactor 3.8.0 → 3.8.1
- Spring 7.0.1 → 7.0.2
- Spring Boot 4.0.0 → 4.0.1
🙇 Thank you
This release was possible thanks to the following contributors who shared their brilliant ideas and awesome pull requests:







