diff --git a/plume-web-jersey/src/main/java/com/coreoz/plume/jersey/security/control/ContentControlFeature.java b/plume-web-jersey/src/main/java/com/coreoz/plume/jersey/security/control/ContentControlFeature.java index 6776cf8..902620c 100644 --- a/plume-web-jersey/src/main/java/com/coreoz/plume/jersey/security/control/ContentControlFeature.java +++ b/plume-web-jersey/src/main/java/com/coreoz/plume/jersey/security/control/ContentControlFeature.java @@ -4,7 +4,6 @@ import java.io.InputStream; import java.lang.reflect.AnnotatedElement; -import jakarta.inject.Singleton; import jakarta.ws.rs.WebApplicationException; import jakarta.ws.rs.container.DynamicFeature; import jakarta.ws.rs.container.ResourceInfo; @@ -13,14 +12,11 @@ import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ReaderInterceptor; import jakarta.ws.rs.ext.ReaderInterceptorContext; +import lombok.extern.slf4j.Slf4j; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -@Singleton +@Slf4j public class ContentControlFeature implements DynamicFeature { - private static final Logger logger = LoggerFactory.getLogger(ContentControlFeature.class); public static final int DEFAULT_MAX_SIZE = 500 * 1024; // 500 KB private final Integer maxSize; @@ -66,11 +62,7 @@ public Object aroundReadFrom(ReaderInterceptorContext context) throws IOExceptio try { headerContentLength = Integer.parseInt(context.getHeaders().getFirst(HttpHeaders.CONTENT_LENGTH)); } catch (NumberFormatException e) { - throw new WebApplicationException( - Response.status(Response.Status.LENGTH_REQUIRED) - .entity("Content-Length header is missing or invalid.") - .build() - ); + headerContentLength = maxSize; // default value for GET or chunked body } if (headerContentLength > maxSize) { throw new WebApplicationException( diff --git a/plume-web-jersey/src/test/java/com/coreoz/plume/jersey/control/ContentSizeLimitTest.java b/plume-web-jersey/src/test/java/com/coreoz/plume/jersey/control/ContentSizeLimitTest.java index 9f60b69..528150d 100644 --- a/plume-web-jersey/src/test/java/com/coreoz/plume/jersey/control/ContentSizeLimitTest.java +++ b/plume-web-jersey/src/test/java/com/coreoz/plume/jersey/control/ContentSizeLimitTest.java @@ -30,7 +30,7 @@ protected Application configure() { public void checkContentSize_withBody_whenWithinDefaultLimit_shouldReturn200() { byte[] data = "12345".getBytes(); Response response = target("/test/upload-default").request().post(Entity.entity(data, MediaType.APPLICATION_OCTET_STREAM)); - assertEquals(200, response.getStatus()); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); } @Test @@ -50,11 +50,17 @@ public void checkContentSize_withBody_whenContentLengthIsWrong_shouldReturn411() assertEquals(Response.Status.LENGTH_REQUIRED.getStatusCode(), request.post(null).getStatus()); } + @Test + public void checkContentSize_withoutBody_whenDefaultLimit_shouldReturn200() { + Builder request = target("/test/upload-default").request(); + assertEquals(Response.Status.OK.getStatusCode(), request.get().getStatus()); + } + @Test public void checkContentSize_withBody_whenWithinCustomLimit_shouldReturn200() { byte[] data = "12345".getBytes(); Response response = target("/test/upload-custom").request().post(Entity.entity(data, MediaType.APPLICATION_OCTET_STREAM)); - assertEquals(200, response.getStatus()); + assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); } @Test @@ -66,6 +72,12 @@ public void checkContentSize_withBody_whenBeyondCustomLimit_shouldReturn413() { assertEquals(Response.Status.REQUEST_ENTITY_TOO_LARGE.getStatusCode(), request.post(entity).getStatus()); } + @Test + public void checkContentSize_withoutBody_whenCustomLimit_shouldReturn200() { + Builder request = target("/test/upload-custom").request(); + assertEquals(Response.Status.OK.getStatusCode(), request.get().getStatus()); + } + @Test public void checkMaxSize_whenCustomControlFeature_shouldSuccess() { // Custom max size diff --git a/plume-web-jersey/src/test/java/com/coreoz/plume/jersey/control/TestContentSizeResource.java b/plume-web-jersey/src/test/java/com/coreoz/plume/jersey/control/TestContentSizeResource.java index b2a46c9..e6e6b59 100644 --- a/plume-web-jersey/src/test/java/com/coreoz/plume/jersey/control/TestContentSizeResource.java +++ b/plume-web-jersey/src/test/java/com/coreoz/plume/jersey/control/TestContentSizeResource.java @@ -2,6 +2,7 @@ import com.coreoz.plume.jersey.security.control.ContentSizeLimit; +import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.core.Response; @@ -17,6 +18,12 @@ public Response uploadDefaultLimit(byte[] data) { return Response.ok("Upload successful").build(); } + @GET + @Path("/upload-default") + public Response getDefaultLimit(byte[] data) { + return Response.ok("get successful").build(); + } + @POST @Path("/upload-custom") @ContentSizeLimit(CUSTOM_MAX_SIZE) @@ -24,4 +31,11 @@ public Response uploadCustomLimit(byte[] data) { return Response.ok("Upload successful").build(); } + @GET + @Path("/upload-custom") + @ContentSizeLimit(CUSTOM_MAX_SIZE) + public Response getCustomLimit(byte[] data) { + return Response.ok("get successful").build(); + } + }