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