Skip to content

Commit f678b94

Browse files
authored
7179 - Fix RequestDetailsCloner (#7180)
* When the originating request is a ServletRequestDetails create a new ServletRequestDetails * add changelog
1 parent 26dbab4 commit f678b94

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
type: fix
3+
issue: 7179
4+
title: "A bug in the class used to copy and reuse the RequestDetails during operations
5+
invoked through the HapiFhirRepository would cause an invalid cast exception downstream
6+
when authentication interceptors were enabled for the operation. This has been fixed."

hapi-fhir-storage/src/main/java/ca/uhn/fhir/jpa/repository/RequestDetailsCloner.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import ca.uhn.fhir.rest.api.RestOperationTypeEnum;
2525
import ca.uhn.fhir.rest.api.server.RequestDetails;
2626
import ca.uhn.fhir.rest.api.server.SystemRequestDetails;
27+
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
2728
import org.hl7.fhir.instance.model.api.IBaseParameters;
2829
import org.hl7.fhir.instance.model.api.IIdType;
2930

@@ -40,7 +41,12 @@ class RequestDetailsCloner {
4041
private RequestDetailsCloner() {}
4142

4243
static DetailsBuilder startWith(RequestDetails theDetails) {
43-
SystemRequestDetails newDetails = new SystemRequestDetails(theDetails);
44+
RequestDetails newDetails;
45+
if (theDetails instanceof ServletRequestDetails servletDetails) {
46+
newDetails = new ServletRequestDetails(servletDetails);
47+
} else {
48+
newDetails = new SystemRequestDetails(theDetails);
49+
}
4450
newDetails.setRequestType(RequestTypeEnum.POST);
4551
newDetails.setOperation(null);
4652
newDetails.setResource(null);
@@ -53,9 +59,9 @@ static DetailsBuilder startWith(RequestDetails theDetails) {
5359
}
5460

5561
static class DetailsBuilder {
56-
private final SystemRequestDetails myDetails;
62+
private final RequestDetails myDetails;
5763

58-
DetailsBuilder(SystemRequestDetails theDetails) {
64+
DetailsBuilder(RequestDetails theDetails) {
5965
myDetails = theDetails;
6066
}
6167

@@ -112,7 +118,7 @@ DetailsBuilder setId(IIdType theId) {
112118
return this;
113119
}
114120

115-
SystemRequestDetails create() {
121+
RequestDetails create() {
116122
return myDetails;
117123
}
118124
}

0 commit comments

Comments
 (0)