package org.jboss.resteasy.test.providers.custom.resource;
import javax.annotation.Priority;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.PreMatching;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.ext.Provider;
import java.io.IOException;
import java.net.URI;
@Provider
@Priority(100)
@PreMatching
public class SetRequestUriRequestFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
if ("https".equalsIgnoreCase(requestContext.getHeaderString("X-Forwarded-Proto"))) {
requestContext.setRequestUri(
requestContext.getUriInfo().getBaseUriBuilder().scheme("https").build(),
requestContext.getUriInfo().getRequestUriBuilder().scheme("https").build());
} else if (requestContext.getUriInfo().getPath().contains("setrequesturi1")) {
requestContext.setRequestUri(
requestContext.getUriInfo().getRequestUriBuilder().path("uri").build());
} else if (requestContext.getUriInfo().getPath().contains("setrequesturi2")) {
requestContext.setRequestUri(URI.create("http://localhost:888/otherbase"),
URI.create("http://xx.yy:888/base/resource/sub"));
UriInfo info = requestContext.getUriInfo();
abortWithEntity(requestContext, info.getAbsolutePath().toASCIIString());
}
}
protected void abortWithEntity(ContainerRequestContext requestContext, String entity) {
StringBuilder sb = new StringBuilder();
sb.append(entity);
Response response = Response.ok(sb.toString()).build();
requestContext.abortWith(response);
}
}