Source:
<code>public void postProcessRequest(RestRequest restRequest, Callback<Void> callback) { Exception exception = null; frontendMetrics.securityServicePostProcessRequestRate.mark(); long startTimeMs = System.currentTimeMillis(); if (!isOpen) { exception = new RestServiceException("SecurityService is closed", RestServiceErrorCode.ServiceUnavailable); } else if (restRequest == null || callback == null) { throw new IllegalArgumentException("RestRequest or Callback is null"); } else if (quotaManager.shouldThrottle(restRequest)) { exception = new RestServiceException("Too many requests", RestServiceErrorCode.TooManyRequests); } else if (restRequest.getRestMethod() == RestMethod.DELETE || restRequest.getRestMethod() == RestMethod.PUT) { try { accountAndContainerNamePreconditionCheck(restRequest); } catch (Exception e) { exception = e; } } else if (restRequest.getRestMethod() == RestMethod.GET) { <START> SubResource subresource = getBlobSubResource(restRequest); <END> String operationOrBlobId = getOperationOrBlobIdFromUri(restRequest, subresource, frontendConfig.pathPrefixesToRemove); operationOrBlobId = operationOrBlobId.startsWith("/") ? operationOrBlobId.substring(1) : operationOrBlobId; if (!operationOrBlobId.isEmpty() && !Operations.OperationsSet.contains(operationOrBlobId)) { try { validateSecurePathIfRequired(restRequest, frontendConfig.securePathToValidate); } catch (Exception e) { exception = e; } } } frontendMetrics.securityServicePostProcessRequestTimeInMs.update(System.currentTimeMillis() - startTimeMs); callback.onCompletion(null, exception); }</code><technical_language>rewrite this get prefix secure path in step: Pair<String> prefixAndResource = getPrefixAndResourceFromUri(restRequest, subResource, frontendConfig.pathPrefixesToRemove); if (needs checking) { validateSecurePathIfRequired(prefixAndResource.getFirst(), frontendConfig.securePathPrefix); }</technical_language>

Target:
public void postProcessRequest(RestRequest restRequest, Callback<Void> callback) { Exception exception = null; frontendMetrics.securityServicePostProcessRequestRate.mark(); long startTimeMs = System.currentTimeMillis(); if (!isOpen) { exception = new RestServiceException("SecurityService is closed", RestServiceErrorCode.ServiceUnavailable); } else if (restRequest == null || callback == null) { throw new IllegalArgumentException("RestRequest or Callback is null"); } else if (quotaManager.shouldThrottle(restRequest)) { exception = new RestServiceException("Too many requests", RestServiceErrorCode.TooManyRequests); } else if (restRequest.getRestMethod() == RestMethod.DELETE || restRequest.getRestMethod() == RestMethod.PUT) { try { accountAndContainerNamePreconditionCheck(restRequest); } catch (Exception e) { exception = e; } } else if (restRequest.getRestMethod() == RestMethod.GET) { SubResource subresource = getBlobSubResource(restRequest); Pair<String, String> prefixAndResource = getPrefixAndResourceFromUri(restRequest, subresource, frontendConfig.pathPrefixesToRemove); String operationOrBlobId = prefixAndResource.getSecond(); operationOrBlobId = operationOrBlobId.startsWith("/") ? operationOrBlobId.substring(1) : operationOrBlobId; if (!operationOrBlobId.isEmpty() && !OPERATIONS.contains(operationOrBlobId)) { try { validateSecurePathIfRequired(restRequest, prefixAndResource.getFirst(), frontendConfig.securePathPrefix); } catch (Exception e) { exception = e; } } } frontendMetrics.securityServicePostProcessRequestTimeInMs.update(System.currentTimeMillis() - startTimeMs); callback.onCompletion(null, exception); }