You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by re...@apache.org on 2002/03/08 06:17:54 UTC
cvs commit: jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4 CoyoteRequest.java
remm 02/03/07 21:17:54
Modified: coyote/src/java/org/apache/coyote/tomcat4 CoyoteRequest.java
Log:
- Implement request facade for Catalina.
Revision Changes Path
1.3 +231 -37 jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4/CoyoteRequest.java
Index: CoyoteRequest.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4/CoyoteRequest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- CoyoteRequest.java 31 Jan 2002 18:42:30 -0000 1.2
+++ CoyoteRequest.java 8 Mar 2002 05:17:54 -0000 1.3
@@ -1,7 +1,7 @@
/*
- * $Header: /home/cvs/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4/CoyoteRequest.java,v 1.2 2002/01/31 18:42:30 remm Exp $
- * $Revision: 1.2 $
- * $Date: 2002/01/31 18:42:30 $
+ * $Header: /home/cvs/jakarta-tomcat-connectors/coyote/src/java/org/apache/coyote/tomcat4/CoyoteRequest.java,v 1.3 2002/03/08 05:17:54 remm Exp $
+ * $Revision: 1.3 $
+ * $Date: 2002/03/08 05:17:54 $
*
* ====================================================================
*
@@ -66,6 +66,7 @@
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.UnsupportedEncodingException;
@@ -104,6 +105,7 @@
import org.apache.catalina.connector.HttpRequestFacade;
import org.apache.catalina.util.Enumerator;
+import org.apache.catalina.util.ParameterMap;
import org.apache.catalina.util.RequestUtil;
import org.apache.catalina.util.StringManager;
@@ -112,7 +114,8 @@
* Wrapper object for the Coyote request.
*
* @author Remy Maucherat
- * @version $Revision: 1.2 $ $Date: 2002/01/31 18:42:30 $
+ * @author Craig R. McClanahan
+ * @version $Revision: 1.3 $ $Date: 2002/03/08 05:17:54 $
*/
public class CoyoteRequest
@@ -134,6 +137,7 @@
*/
public void setCoyoteRequest(Request coyoteRequest) {
this.coyoteRequest = coyoteRequest;
+ inputStream.setRequest(coyoteRequest);
}
/**
@@ -196,7 +200,31 @@
/**
+ * The parsed parameters for this request. This is populated only if
+ * parameter information is requested via one of the
+ * <code>getParameter()</code> family of method calls. The key is the
+ * parameter name, while the value is a String array of values for this
+ * parameter.
+ * <p>
+ * <strong>IMPLEMENTATION NOTE</strong> - Once the parameters for a
+ * particular request are parsed and stored here, they are not modified.
+ * Therefore, application level access to the parameters need not be
+ * synchronized.
+ */
+ protected ParameterMap parameters = null;
+
+
+ /**
+ * Authentication type.
+ */
+ protected String authType = null;
+
+
+ /**
* Reader.
+ * Note: At the moment, no attempt is being made at recycling the reader,
+ * but this could be implemented in the future, using a design like the one
+ * used for the output buffer.
*/
protected BufferedReader reader = null;
@@ -204,7 +232,55 @@
/**
* ServletInputStream.
*/
- protected ServletInputStream stream = null;
+ protected CoyoteInputStream inputStream = new CoyoteInputStream();
+
+
+ /**
+ * Using stream flag.
+ */
+ protected boolean usingInputStream = false;
+
+
+ /**
+ * Context path.
+ */
+ protected String contextPath = "";
+
+
+ /**
+ * Path info.
+ */
+ protected String pathInfo = null;
+
+
+ /**
+ * Servlet path.
+ */
+ protected String servletPath = null;
+
+
+ /**
+ * Query string.
+ */
+ protected String queryString = null;
+
+
+ /**
+ * User principal.
+ */
+ protected Principal userPrincipal = null;
+
+
+ /**
+ * Session parsed flag.
+ */
+ protected boolean sessionParsed = false;
+
+
+ /**
+ * Request parameters parsed flag.
+ */
+ protected boolean requestParametersParsed = false;
// --------------------------------------------------------- Public Methods
@@ -215,6 +291,29 @@
* preparation for reuse of this object.
*/
public void recycle() {
+
+ context = null;
+ wrapper = null;
+
+ authType = null;
+ usingInputStream = false;
+ contextPath = "";
+ pathInfo = null;
+ servletPath = null;
+ queryString = null;
+ reader = null;
+ userPrincipal = null;
+ sessionParsed = false;
+ requestParametersParsed = false;
+
+ attributes.clear();
+ notes.clear();
+ cookies.clear();
+ if (parameters != null) {
+ parameters.setLocked(false);
+ parameters.clear();
+ }
+
}
@@ -270,7 +369,6 @@
this.connector = connector;
}
-
/**
* The Context within which this Request is being processed.
*/
@@ -371,7 +469,7 @@
* Return the input stream associated with this Request.
*/
public InputStream getStream() {
- return null; // This call shouldn't exist in the first place
+ return inputStream;
}
/**
@@ -380,6 +478,7 @@
* @param stream The new input stream
*/
public void setStream(InputStream stream) {
+ // Ignore
}
@@ -418,7 +517,7 @@
*/
public ServletInputStream createInputStream()
throws IOException {
- return null;
+ return inputStream;
}
@@ -429,7 +528,7 @@
* @exception IOException if an input/output error occurs
*/
public void finishRequest() throws IOException {
- // Close reader and input stream
+ // The reader and input stream don't need to be closed
}
@@ -504,6 +603,7 @@
* @param protocol Protocol name and version
*/
public void setProtocol(String protocol) {
+ // Not used
}
@@ -513,6 +613,7 @@
* @param remoteAddr The remote IP address
*/
public void setRemoteAddr(String remoteAddr) {
+ // Not used
}
@@ -523,6 +624,7 @@
* @param remoteHost The remote host name
*/
public void setRemoteHost(String remoteHost) {
+ // Not used
}
@@ -533,6 +635,7 @@
* @param scheme The scheme
*/
public void setScheme(String scheme) {
+ // Not used
}
@@ -543,6 +646,7 @@
* @param secure The new isSecure value
*/
public void setSecure(boolean secure) {
+ // Not used
}
@@ -552,6 +656,7 @@
* @param name The server name
*/
public void setServerName(String name) {
+ coyoteRequest.serverName().setString(name);
}
@@ -561,6 +666,7 @@
* @param port The server port
*/
public void setServerPort(int port) {
+ coyoteRequest.setServerPort(port);
}
@@ -626,9 +732,8 @@
throw new IllegalStateException
(sm.getString("requestBase.getInputStream.ise"));
- if (stream == null)
- stream = createInputStream();
- return (stream);
+ usingInputStream = true;
+ return inputStream;
}
@@ -640,10 +745,13 @@
* language, the server's default Locale is returned.
*/
public Locale getLocale() {
- if (locales.size() > 0)
+
+ if (locales.size() > 0) {
return ((Locale) locales.get(0));
- else
+ } else {
return (defaultLocale);
+ }
+
}
@@ -654,11 +762,13 @@
* preferred language, the server's default Locale is returned.
*/
public Enumeration getLocales() {
+
if (locales.size() > 0)
return (new Enumerator(locales));
ArrayList results = new ArrayList();
results.add(defaultLocale);
return (new Enumerator(results));
+
}
@@ -727,12 +837,14 @@
*/
public BufferedReader getReader() throws IOException {
- if (stream != null)
+ if (usingInputStream)
throw new IllegalStateException
(sm.getString("requestBase.getReader.ise"));
if (reader == null) {
- // FIXME
+ String encoding = getCharacterEncoding();
+ InputStreamReader r = new InputStreamReader(inputStream, encoding);
+ reader = new BufferedReader(r);
}
return (reader);
@@ -769,7 +881,7 @@
* Return the remote IP address making this Request.
*/
public String getRemoteAddr() {
- return (null);
+ return coyoteRequest.remoteAddr().toString();
}
@@ -777,7 +889,7 @@
* Return the remote host name making this Request.
*/
public String getRemoteHost() {
- return (null);
+ return coyoteRequest.remoteHost().toString();
}
@@ -836,7 +948,7 @@
* Was this request received on a secure connection?
*/
public boolean isSecure() {
- return (false);
+ return (coyoteRequest.isSecure());
}
@@ -909,6 +1021,7 @@
* @param cookie The new cookie
*/
public void addCookie(Cookie cookie) {
+ cookies.add(cookie);
}
@@ -919,6 +1032,8 @@
* @param value The new header value
*/
public void addHeader(String name, String value) {
+ // Not used ?
+ System.out.println("coyoteRequest.addHeader(name, value)");
}
@@ -929,6 +1044,7 @@
* @param locale The new preferred Locale
*/
public void addLocale(Locale locale) {
+ locales.add(locale);
}
@@ -941,6 +1057,7 @@
* @param values Corresponding values for this request parameter
*/
public void addParameter(String name, String values[]) {
+ parameters.put(name, values);
}
@@ -948,6 +1065,7 @@
* Clear the collection of Cookies associated with this Request.
*/
public void clearCookies() {
+ cookies.clear();
}
@@ -955,6 +1073,7 @@
* Clear the collection of Headers associated with this Request.
*/
public void clearHeaders() {
+ // Not used
}
@@ -962,6 +1081,7 @@
* Clear the collection of Locales associated with this Request.
*/
public void clearLocales() {
+ locales.clear();
}
@@ -969,6 +1089,7 @@
* Clear the collection of parameters associated with this Request.
*/
public void clearParameters() {
+ parameters.clear();
}
@@ -980,6 +1101,7 @@
* @param type The authentication type used
*/
public void setAuthType(String type) {
+ this.authType = type;
}
@@ -991,6 +1113,13 @@
* @param path The context path
*/
public void setContextPath(String path) {
+
+ if (path == null) {
+ this.contextPath = "";
+ } else {
+ this.contextPath = path;
+ }
+
}
@@ -1000,6 +1129,7 @@
* @param method The request method
*/
public void setMethod(String method) {
+ // Not used
}
@@ -1010,6 +1140,7 @@
* @param query The query string
*/
public void setQueryString(String query) {
+ // Not used
}
@@ -1021,6 +1152,7 @@
* @param path The path information
*/
public void setPathInfo(String path) {
+ this.pathInfo = path;
}
@@ -1032,6 +1164,7 @@
* @param flag The new flag
*/
public void setRequestedSessionCookie(boolean flag) {
+ // Not used
}
@@ -1042,6 +1175,7 @@
* @param id The new session id
*/
public void setRequestedSessionId(String id) {
+ // Not used
}
@@ -1053,6 +1187,7 @@
* @param flag The new flag
*/
public void setRequestedSessionURL(boolean flag) {
+ // Not used
}
@@ -1063,6 +1198,7 @@
* @param uri The request URI
*/
public void setRequestURI(String uri) {
+ // Not used
}
@@ -1074,6 +1210,7 @@
* @param path The servlet path
*/
public void setServletPath(String path) {
+ this.servletPath = path;
}
@@ -1085,6 +1222,7 @@
* @param principal The user Principal
*/
public void setUserPrincipal(Principal principal) {
+ this.userPrincipal = principal;
}
@@ -1095,7 +1233,7 @@
* Return the authentication type used for this Request.
*/
public String getAuthType() {
- return (null);
+ return (authType);
}
@@ -1104,7 +1242,7 @@
* of the Request.
*/
public String getContextPath() {
- return (null);
+ return (contextPath);
}
@@ -1161,7 +1299,7 @@
* @param name Name of the requested header
*/
public String getHeader(String name) {
- return null;
+ return coyoteRequest.getHeader(name);
}
@@ -1172,7 +1310,7 @@
* @param name Name of the requested header
*/
public Enumeration getHeaders(String name) {
- return null;
+ return coyoteRequest.getMimeHeaders().values(name);
}
@@ -1180,7 +1318,7 @@
* Return the names of all headers received with this request.
*/
public Enumeration getHeaderNames() {
- return null;
+ return coyoteRequest.getMimeHeaders().names();
}
@@ -1196,10 +1334,11 @@
public int getIntHeader(String name) {
String value = getHeader(name);
- if (value == null)
+ if (value == null) {
return (-1);
- else
+ } else {
return (Integer.parseInt(value));
+ }
}
@@ -1208,7 +1347,7 @@
* Return the HTTP request method used in this Request.
*/
public String getMethod() {
- return null;
+ return coyoteRequest.method().toString();
}
@@ -1216,7 +1355,7 @@
* Return the path information associated with this Request.
*/
public String getPathInfo() {
- return null;
+ return (pathInfo);
}
@@ -1225,7 +1364,16 @@
* to a real path.
*/
public String getPathTranslated() {
- return null;
+
+ if (context == null)
+ return (null);
+
+ if (pathInfo == null) {
+ return (null);
+ } else {
+ return (context.getServletContext().getRealPath(pathInfo));
+ }
+
}
@@ -1234,7 +1382,7 @@
* Return the query string associated with this request.
*/
public String getQueryString() {
- return null;
+ return (queryString);
}
@@ -1243,7 +1391,13 @@
* for this Request.
*/
public String getRemoteUser() {
- return null;
+
+ if (userPrincipal != null) {
+ return (userPrincipal.getName());
+ } else {
+ return (null);
+ }
+
}
@@ -1259,7 +1413,7 @@
* Return the request URI for this request.
*/
public String getRequestURI() {
- return null;
+ return coyoteRequest.requestURI().toString();
}
@@ -1280,7 +1434,25 @@
* reconstructed URL
*/
public StringBuffer getRequestURL() {
- return null;
+
+ StringBuffer url = new StringBuffer();
+ String scheme = getScheme();
+ int port = getServerPort();
+ if (port < 0)
+ port = 80; // Work around java.net.URL bug
+
+ url.append(scheme);
+ url.append("://");
+ url.append(getServerName());
+ if ((scheme.equals("http") && (port != 80))
+ || (scheme.equals("https") && (port != 443))) {
+ url.append(':');
+ url.append(port);
+ }
+ url.append(getRequestURI());
+
+ return (url);
+
}
@@ -1289,7 +1461,7 @@
* that will process this request.
*/
public String getServletPath() {
- return null;
+ return (servletPath);
}
@@ -1339,7 +1511,7 @@
* <code>isRequestedSessionIdFromURL()</code> instead.
*/
public boolean isRequestedSessionIdFromUrl() {
- return false;
+ return (isRequestedSessionIdFromURL());
}
@@ -1359,7 +1531,29 @@
* @param role Role name to be validated
*/
public boolean isUserInRole(String role) {
- return false;
+
+ // Have we got an authenticated principal at all?
+ if (userPrincipal == null)
+ return (false);
+
+ // Identify the Realm we will use for checking role assignmenets
+ if (context == null)
+ return (false);
+ Realm realm = context.getRealm();
+ if (realm == null)
+ return (false);
+
+ // Check for a role alias defined in a <security-role-ref> element
+ if (wrapper != null) {
+ String realRole = wrapper.findSecurityReference(role);
+ if ((realRole != null) &&
+ realm.hasRole(userPrincipal, realRole))
+ return (true);
+ }
+
+ // Check for a role defined directly as a <security-role>
+ return (realm.hasRole(userPrincipal, role));
+
}
@@ -1367,7 +1561,7 @@
* Return the principal that has been authenticated for this Request.
*/
public Principal getUserPrincipal() {
- return null;
+ return (userPrincipal);
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>