95 lines
3.3 KiB
Java
95 lines
3.3 KiB
Java
package org.gcube.datatransfer.resolver.requesthandler;
|
|
|
|
import java.io.IOException;
|
|
import java.net.URI;
|
|
import java.util.List;
|
|
|
|
import javax.servlet.ServletContext;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
import javax.ws.rs.container.ContainerRequestContext;
|
|
import javax.ws.rs.container.ContainerRequestFilter;
|
|
import javax.ws.rs.container.ContainerResponseContext;
|
|
import javax.ws.rs.container.ContainerResponseFilter;
|
|
import javax.ws.rs.container.ResourceContext;
|
|
import javax.ws.rs.core.Application;
|
|
import javax.ws.rs.core.Context;
|
|
import javax.ws.rs.core.UriInfo;
|
|
import javax.ws.rs.ext.Provider;
|
|
|
|
import org.gcube.common.authorization.library.provider.SecurityTokenProvider;
|
|
import org.gcube.common.scope.api.ScopeProvider;
|
|
import org.gcube.datatransfer.resolver.MultiReadHttpServletRequest;
|
|
import org.gcube.datatransfer.resolver.UriResolverServices;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
|
|
/**
|
|
* The Class TokenSetter.
|
|
*
|
|
* @author Francesco Mangiacrapa at ISTI-CNR (francesco.mangiacrapa@isti.cnr.it)
|
|
* Feb 19, 2019
|
|
*/
|
|
@Provider
|
|
public class TokenSetter implements ContainerRequestFilter, ContainerResponseFilter {
|
|
|
|
public static final String ROOT_SCOPE = "root-scope";
|
|
|
|
public static final String ROOT_APP_TOKEN = "root-app-token";
|
|
|
|
private static final Logger log = LoggerFactory.getLogger(TokenSetter.class);
|
|
|
|
@Context ServletContext context;
|
|
|
|
@Context
|
|
HttpServletRequest webRequest;
|
|
|
|
@Context
|
|
Application application;
|
|
|
|
@Context
|
|
ResourceContext resourceContext;
|
|
|
|
/* (non-Javadoc)
|
|
* @see javax.ws.rs.container.ContainerRequestFilter#filter(javax.ws.rs.container.ContainerRequestContext)
|
|
*/
|
|
@Override
|
|
public void filter(ContainerRequestContext reqContext) throws IOException {
|
|
log.info("TokenSetter Request called");
|
|
|
|
if(SecurityTokenProvider.instance.get()==null)
|
|
SecurityTokenProvider.instance.set(context.getInitParameter(ROOT_APP_TOKEN));
|
|
|
|
if(ScopeProvider.instance.get()==null)
|
|
ScopeProvider.instance.set(context.getInitParameter(ROOT_SCOPE));
|
|
|
|
|
|
MultiReadHttpServletRequest multiReadRequest = new MultiReadHttpServletRequest(webRequest);
|
|
String requestURI = multiReadRequest.getRequestURI();
|
|
String queryString = multiReadRequest.getQueryString();
|
|
log.debug("Request URI: " + requestURI + ", QueryString: " +queryString+ ", Path Info: "+multiReadRequest.getPathInfo());
|
|
List<String> listOfPath = UriResolverServices.getInstance().getListOfResourcePath(application.getClasses());
|
|
log.info("The resources are: {}", listOfPath);
|
|
|
|
UriInfo uriInfo = reqContext.getUriInfo();
|
|
String prefix = "/redirect";
|
|
String path = uriInfo.getRequestUri().getPath();
|
|
log.info("The path is: {}", path);
|
|
if(requestURI.startsWith("qqqqq")){
|
|
URI newRequestURI = uriInfo.getBaseUriBuilder().path("new").build();
|
|
reqContext.setRequestUri(newRequestURI);
|
|
}
|
|
}
|
|
|
|
/* (non-Javadoc)
|
|
* @see javax.ws.rs.container.ContainerResponseFilter#filter(javax.ws.rs.container.ContainerRequestContext, javax.ws.rs.container.ContainerResponseContext)
|
|
*/
|
|
@Override
|
|
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
|
|
throws IOException {
|
|
log.info("TokenSetter Response called");
|
|
SecurityTokenProvider.instance.reset();
|
|
ScopeProvider.instance.reset();
|
|
|
|
}
|
|
} |