diff --git a/src/main/java/org/entando/entando/web/common/exceptions/FileMaxSizeException.java b/src/main/java/org/entando/entando/web/common/exceptions/FileMaxSizeException.java
new file mode 100644
index 000000000..40f4c223a
--- /dev/null
+++ b/src/main/java/org/entando/entando/web/common/exceptions/FileMaxSizeException.java
@@ -0,0 +1,14 @@
+package org.entando.entando.web.common.exceptions;
+
+import com.agiletec.aps.system.exception.EntRuntimeException;
+
+public class FileMaxSizeException extends EntRuntimeException {
+
+ public FileMaxSizeException(String message) {
+ super(message);
+ }
+
+ public FileMaxSizeException(String message, Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/src/main/java/org/entando/entando/web/common/handlers/RestExceptionHandler.java b/src/main/java/org/entando/entando/web/common/handlers/RestExceptionHandler.java
index dab8573ba..4bb18cece 100644
--- a/src/main/java/org/entando/entando/web/common/handlers/RestExceptionHandler.java
+++ b/src/main/java/org/entando/entando/web/common/handlers/RestExceptionHandler.java
@@ -146,6 +146,16 @@ public ErrorRestResponse processValidationError(MethodArgumentNotValidException
return processAllErrors(result);
}
+ @ExceptionHandler(value = FileMaxSizeException.class)
+ @ResponseStatus(HttpStatus.PAYLOAD_TOO_LARGE)
+ @ResponseBody
+ public ErrorRestResponse processTooLargePayload(FileMaxSizeException ex) {
+ logger.debug("Handling {} error", ex.getClass().getSimpleName());
+ ErrorRestResponse dto = new ErrorRestResponse();
+ dto.addError(new RestError("1", "File is too large"));
+ return dto;
+ }
+
private ErrorRestResponse processAllErrors(BindingResult result) {
return processAllErrors(result.getFieldErrors(), result.getGlobalErrors());
}
diff --git a/src/main/java/org/entando/entando/web/common/interceptor/FileBrowserSizeInterceptor.java b/src/main/java/org/entando/entando/web/common/interceptor/FileBrowserSizeInterceptor.java
new file mode 100644
index 000000000..9a92ba5dd
--- /dev/null
+++ b/src/main/java/org/entando/entando/web/common/interceptor/FileBrowserSizeInterceptor.java
@@ -0,0 +1,37 @@
+package org.entando.entando.web.common.interceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.entando.entando.web.common.exceptions.FileMaxSizeException;
+import org.springframework.http.HttpMethod;
+import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
+
+public class FileBrowserSizeInterceptor extends HandlerInterceptorAdapter {
+
+ private int fileUploadMaxSize;
+
+ public FileBrowserSizeInterceptor(int maxSize) {
+ this.fileUploadMaxSize = maxSize;
+ }
+
+ public void setFileUploadMaxSize(int fileUploadMaxSize) {
+ this.fileUploadMaxSize = fileUploadMaxSize;
+ }
+
+ @Override
+ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+ return isValidRequest(request);
+ }
+
+ private boolean isValidRequest(HttpServletRequest request) {
+ if (isUploadMethod(request) && request.getContentLength() > this.fileUploadMaxSize) {
+ throw new FileMaxSizeException("Invalid max content-length");
+ }
+ return true;
+ }
+
+ private boolean isUploadMethod(HttpServletRequest request) {
+ HttpMethod method = HttpMethod.resolve(request.getMethod());
+ return HttpMethod.POST.equals(method) || HttpMethod.POST.equals(method);
+ }
+}
diff --git a/src/main/resources/spring/web/servlet-context.xml b/src/main/resources/spring/web/servlet-context.xml
index 437fbd881..101334f77 100644
--- a/src/main/resources/spring/web/servlet-context.xml
+++ b/src/main/resources/spring/web/servlet-context.xml
@@ -105,10 +105,15 @@
class="org.entando.entando.web.common.interceptor.EntandoOauth2Interceptor" />
-
+
+
+
+
+