diff --git a/src/main/java/com/enonic/app/booster/Preconditions.java b/src/main/java/com/enonic/app/booster/Preconditions.java index 6e7a1cd..87f96dc 100644 --- a/src/main/java/com/enonic/app/booster/Preconditions.java +++ b/src/main/java/com/enonic/app/booster/Preconditions.java @@ -39,9 +39,12 @@ public Result check( final HttpServletRequest request ) return Result.SILENT_BYPASS; } - // If path contains /_/ it is a controller request. We don't cache them here at least for now. + // If path contains /_/ it is a controller request. + // We cache /_/component/ controller requests, but not the other ones. final String requestURI = request.getRequestURI(); - if ( requestURI.contains( "/_/" ) ) + final int indexOfUnderscore = requestURI.indexOf( "/_/" ); + if ( indexOfUnderscore != -1 && + !requestURI.regionMatches( indexOfUnderscore + "/_/".length(), "component/", 0, "component/".length() ) ) { LOG.debug( "Bypassing request with uri {}", requestURI ); return Result.SILENT_BYPASS; diff --git a/src/test/java/com/enonic/app/booster/PreconditionsTest.java b/src/test/java/com/enonic/app/booster/PreconditionsTest.java index fea0fbd..7afd58a 100644 --- a/src/test/java/com/enonic/app/booster/PreconditionsTest.java +++ b/src/test/java/com/enonic/app/booster/PreconditionsTest.java @@ -139,6 +139,28 @@ void preconditions_service() assertTrue( preconditions.check( request ).bypass() ); } + @Test + void preconditions_component_service_incomplete() + { + when( request.getScheme() ).thenReturn( "https" ); + when( request.getMethod() ).thenReturn( "GET" ); + when( request.getRequestURI() ).thenReturn( "/site/repo/master/_/component" ); + + Preconditions preconditions = new Preconditions(); + assertTrue( preconditions.check( request ).bypass() ); + } + + @Test + void preconditions_component_service() + { + when( request.getScheme() ).thenReturn( "https" ); + when( request.getMethod() ).thenReturn( "GET" ); + when( request.getRequestURI() ).thenReturn( "/site/repo/master/_/component/main/0" ); + + Preconditions preconditions = new Preconditions(); + assertFalse( preconditions.check( request ).bypass() ); + } + @Test void no_license() {