You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2021/02/22 12:58:35 UTC
[isis] branch master updated: ISIS-2538: fix potential client side
caching issues for Blob/Clob
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new ca8668d ISIS-2538: fix potential client side caching issues for Blob/Clob
ca8668d is described below
commit ca8668d0c020b46b95c651cc5939f76d64fb171a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Feb 22 13:58:19 2021 +0100
ISIS-2538: fix potential client side caching issues for Blob/Clob
reinstates code that was previously removed for the no-arg case, so does
apply more generally
---
.../viewer/wicket/model/models/ActionModel.java | 35 ++++++++++++++++++----
.../actionresponse/ActionResultResponseType.java | 4 +--
2 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
index 946b176..141e1b0 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ActionModel.java
@@ -278,7 +278,7 @@ implements FormUiModel, FormExecutorContext, BookmarkableModel {
return null;
}
- public static IRequestHandler downloadHandler(final Object value) {
+ public IRequestHandler downloadHandler(final Object value) {
if(value instanceof Clob) {
val clob = (Clob)value;
return handlerFor(resourceStreamFor(clob), clob);
@@ -313,15 +313,20 @@ implements FormUiModel, FormExecutorContext, BookmarkableModel {
}
private static IResourceStream resourceStreamFor(final Clob clob) {
- final IResourceStream resourceStream = new StringResourceStream(clob.getChars(), clob.getMimeType().toString());
- return resourceStream;
+ return new StringResourceStream(clob.getChars(), clob.getMimeType().toString());
}
- private static IRequestHandler handlerFor(final IResourceStream resourceStream, final NamedWithMimeType namedWithMimeType) {
- final ResourceStreamRequestHandler handler =
+ private IRequestHandler handlerFor(
+ final IResourceStream resourceStream,
+ final NamedWithMimeType namedWithMimeType) {
+ val handler =
new ResourceStreamRequestHandler(resourceStream, namedWithMimeType.getName());
handler.setContentDisposition(ContentDisposition.ATTACHMENT);
- return handler;
+
+ //ISIS-1619, prevent clients from caching the response content
+ return isIdempotentOrCachable()
+ ? handler
+ : enforceNoCacheOnClientSide(handler);
}
//////////////////////////////////////////////////
@@ -476,6 +481,12 @@ implements FormUiModel, FormExecutorContext, BookmarkableModel {
});
}
+
+ // -- HELPER
+
+ private boolean isIdempotentOrCachable() {
+ return ObjectAction.Util.isIdempotentOrCachable(getMetaModel());
+ }
// private boolean isPartOfChoicesConsideringDependentArgs(
// ManagedObject paramValue,
@@ -487,5 +498,17 @@ implements FormUiModel, FormExecutorContext, BookmarkableModel {
// .anyMatch(choice->Objects.equals(pendingValue, choice.getPojo()));
// }
+ // -- CLIENT SIDE CACHING ASPECTS ...
+
+ private static IRequestHandler enforceNoCacheOnClientSide(IRequestHandler downloadHandler){
+ if(downloadHandler==null) {
+ return downloadHandler;
+ }
+ if(downloadHandler instanceof ResourceStreamRequestHandler)
+ ((ResourceStreamRequestHandler) downloadHandler)
+ .setCacheDuration(org.apache.wicket.util.time.Duration.seconds(0));
+
+ return downloadHandler;
+ }
}
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index 121e2a9..66f11a4 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -82,7 +82,7 @@ public enum ActionResultResponseType {
@Override
public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
final Object value = resultAdapter.getPojo();
- IRequestHandler handler = ActionModel.downloadHandler(value);
+ IRequestHandler handler = model.downloadHandler(value);
return ActionResultResponse.withHandler(handler);
}
},
@@ -90,7 +90,7 @@ public enum ActionResultResponseType {
@Override
public ActionResultResponse interpretResult(ActionModel model, AjaxRequestTarget target, ManagedObject resultAdapter) {
final Object value = resultAdapter.getPojo();
- IRequestHandler handler = ActionModel.downloadHandler(value);
+ IRequestHandler handler = model.downloadHandler(value);
return ActionResultResponse.withHandler(handler);
}
},