Security
- GHSA-6f5m-mhjg-qwxq – MCP tool callbacks do not encode path parameters, allowing request retargeting
- GHSA-4v2q-56v7-2cpw – MCP transport, admin and dashboard endpoints are exposed by default
- GHSA-m4cg-mhpg-rh2r – MCP audit events record credentials and request/response bodies without redaction
- GHSA-5f9r-4mc4-qh3c – Unbounded MCP pending-confirmation store allows memory exhaustion
- GHSA-jcgg-59c8-w4wh – MCP request context in a
ThreadLocalcan leak headers between concurrent WebFlux requests - GHSA-rhhx-6j8h-8cvw – Unbounded per-locale OpenAPI cache allows memory exhaustion via
Accept-Language - GHSA-c925-vm88-mpp9 – Scalar starters trust client-supplied forwarded headers and render from a shared mutable bean
- CVE-2026-75838 – Cross-site scripting in the DOMPurify bundled with swagger-ui, addressed by upgrading swagger-ui to 5.32.14
Added
- #3340 – Describe
JsonNullablevalues without their Java wrapper - #3325 – Manage the swagger artifacts in
springdoc-openapi-bom, so that modules holding only the annotations stay in lockstep - #3321 – Add
springdoc.login-endpoint.username-exampleandspringdoc.login-endpoint.password-exampleto document the Spring Security login endpoint
Changed
- MCP is now opt-in. Set
springdoc.ai.mcp.enabled=true, andspringdoc.ai.mcp.dashboard-enabled=truefor the dashboard - The Scalar starters no longer register forwarded-header handling. Set
server.forward-headers-strategy=framework(ornative) behind a trusted proxy - Add
springdoc.cache.max-entries(default100) to bound the per-locale OpenAPI cache - Add
springdoc.ai.mcp.audit.redact(defaulttrue) to mask secrets in MCP audit events - Document that the MCP approval flow is a confirmation step, not an authorization control
- Document the security policy and the release versioning scheme
- #3351 –
java.time.Duration,LocalTimeandOffsetTimeare now resolved by swagger-core instead of being forced to a barestring, so they carry aformat(durationandpartial-timerespectively for the first two) - A property whose type only implements
Setindirectly (LinkedHashSet,TreeSet, …) is now described withuniqueItems: true, following swagger-api/swagger-core#5265 - Upgrade swagger-core to version 2.2.55
- Upgrade swagger-ui to version 5.32.14
Fixed
- #3328, #3337 –
/v3/api-docsfails with aNullPointerExceptionwhen spring-hateoas is on the classpath withoutHateoasProperties - #3314 –
Json Processing Exception occurredis logged for every constrained parameter whose schema is not aJsonSchema - #3317 – An injected
HttpHeadersparameter is described as a schema - #3332 – The properties a Kotlin entity inherits from an
@Embeddableare missing from the Spring Data REST schemas - #3320 –
@OrderandOrderedignored when applying customizers - #3319 – A
Pagenested in another schema is not replaced byPagedModel - #3313 – Springdoc auto-configurations rely on unspecified auto-configuration ordering
- #3331 – Validation annotations declared inside
Optionalparameters are dropped - #3322 – Validation annotations on a container's type argument leak between parameters
- #3315 – An OAS 3.1
JsonSchemacannot be cloned through JSON - #3300 – TYPE_USE annotations on
@ParameterObjectfields are not passed along - #3341 – Stabilize Spring Data
SortandPageableschema property order - #3338 – Kotlin nullability interpretation of the
Any?type - #3136 – A Spring Data REST association to a non-exported entity expands its
@EmbeddedIdand@MapsIdfields recursively in the response schemas - The Spring Data REST response post-processing rewrote an association property in place, so the
…Responserefs could leak into the schema shared with the request body representation
Full Changelog: v3.1.0...v3.1.1