Hello -

Tomcat 7.0.8 on RHEL6. I have two webapps, one accessed at /webapp_one and one at /webapp_two. My question has to do with how to include output from /webapp_two in the output of /webapp_one.

I want to use /webapp_one as an authentication front end for /webapp_two, since /webapp_two is a large, complex web app and I want to do authentication filtering on patterns in the query string. My scheme is to analyze the request URL in the body of /webapp_one. If it should be protected, rewrite it by adding a flag into the URI, so that it can be caught by my authentication filter in the web.xml, and redirect it back to /webapp_one. If it does not have to be protected, or if it has been protected by my filter, wrap the request so that it looks like a request to /webapp_two, get a RequestDispatcher from /webapp_two's context, and 'include' the output from /webapp_two in the response from /webapp_one.

The problem is that this is not working, and I believe that the problem is in how I am getting /webapp_two's ServletContext, or in how I am referring to the servlet in /webapp_two's context, since I am not seeing any activity from /webapp_two in the logs.

    Here are the particulars:

 * I have 'crossContext=true' set in /webapp_one's context
 * Here is my request wrapper

public class MyRequestWrapper extends HttpServletRequestWrapper {


    String queryString = null;
    String uri = null;
    String contextPath = null;
    String pathTranslated = null;

    public GSRequestWrapper(HttpServletRequest req) {
    super(req);
    }

    public void setRequestURI(String newUri) { uri = newUri; }
    public String getRequestURI() { return uri; }

    public void setContextPath(String cp) { contextPath = cp; }
    public String getContextPath() { return contextPath; }

    public void setPathTranslated(String pt) { pathTranslated = pt; }
    public String getPathTranslated() { return pathTranslated; }


    public StringBuffer getRequestURL() {

        StringBuffer sb = new StringBuffer();
        sb.append(uri + "?" + queryString);

       return sb;
    }
}

 * Here is the code I use to create the wrapper

    MyRequestWrapper myReq = new MyRequestWrapper(req);

myReq.setRequestURI(req.getRequestURI().replaceFirst("webapp_one", "webapp_two")); myReq.setContextPath(req.getContextPath().replaceFirst("webapp_one", "webapp_two")); myReq.setPathTranslated(req.getPathTranslated().replaceFirst("webapp_one", "webapp_two"));

    ServletContext twoContext = sc.getContext("/webapp_two");


 * In /webapp_two, the url-pattern intercepted is '/*', so this is how
   I am trying to create the RequestDispatcher

    RequestDispatcher rd = twoContext.getRequestDispatcher("/");


Trying all this out, I see that the RequestDispatcher I am creating is not null, but I am not seeing any activity in /webapp_two, and the page returned is blank. Am I making a mistake in referring to the context of /webapp_two, or in how I am creating my request wrapper, or in how I am referring to the servlet in /webapp_two?

Garey Mills
Library Systems Office
UC Berkeley

Reply via email to