tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Garey Mills <gmi...@library.berkeley.edu>
Subject question about inter-webapp communication
Date Wed, 19 Oct 2011 17:56:32 GMT
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

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message