import org.apache.catalina.LifecycleState;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
-import org.apache.catalina.util.LifecycleBase;
import org.apache.coyote.RequestInfo;
import org.apache.juli.logging.Log;
import org.apache.juli.logging.LogFactory;
*/
public void setPattern(String pattern) {
if (pattern == null)
- pattern = "";
- if (pattern.equals(Constants.AccessLog.COMMON_ALIAS))
- pattern = Constants.AccessLog.COMMON_PATTERN;
- if (pattern.equals(Constants.AccessLog.COMBINED_ALIAS))
- pattern = Constants.AccessLog.COMBINED_PATTERN;
- this.pattern = pattern;
+ this.pattern = "";
+ else if (pattern.equals(Constants.AccessLog.COMMON_ALIAS))
+ this.pattern = Constants.AccessLog.COMMON_PATTERN;
+ else if (pattern.equals(Constants.AccessLog.COMBINED_ALIAS))
+ this.pattern = Constants.AccessLog.COMBINED_PATTERN;
+ else
+ this.pattern = pattern;
logElements = createLogElements();
}
}
+ @Override
public void log(Request request, Response response, long time) {
if (logElements == null || condition != null
&& null != request.getRequest().getAttribute(condition)) {
/**
* Start this component and implement the requirements
- * of {@link LifecycleBase#startInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#startInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
/**
* Stop this component and implement the requirements
- * of {@link LifecycleBase#stopInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#stopInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
* write thread name - %I
*/
protected class ThreadNameElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
RequestInfo info = request.getCoyoteRequest().getRequestProcessor();
LOCAL_ADDR_VALUE = init;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(LOCAL_ADDR_VALUE);
* write remote IP address - %a
*/
protected class RemoteAddrElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(request.getRemoteAddr());
* write remote host name - %h
*/
protected class HostElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(request.getRemoteHost());
* write remote logical username from identd (always returns '-') - %l
*/
protected class LogicalUserNameElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append('-');
* write request protocol - %H
*/
protected class ProtocolElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(request.getProtocol());
* write remote user that was authenticated (if any), else '-' - %u
*/
protected class UserElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (request != null) {
protected class DateAndTimeElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
AccessDateStruct struct = currentDateStruct.get();
* write first line of the request (method and request URI) - %r
*/
protected class RequestElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (request != null) {
* write HTTP status code of the response - %s
*/
protected class HttpStatusCodeElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (response != null) {
* write local port on which this request was received - %p
*/
protected class LocalPortElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(request.getServerPort());
this.conversion = conversion;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
long length = response.getContentCountLong() ;
* write request method (GET, POST, etc.) - %m
*/
protected class MethodElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (request != null) {
this.millis = millis;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (millis) {
* write Query string (prepended with a '?' if it exists) - %q
*/
protected class QueryElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
String query = null;
* write user session ID - %S
*/
protected class SessionIdElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (request != null) {
* write requested URL path - %U
*/
protected class RequestURIElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (request != null) {
* write local server name - %v
*/
protected class LocalServerNameElement implements AccessLogElement {
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(request.getServerName());
this.str = str;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(str);
this.header = header;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
String value = request.getHeader(header);
this.header = header;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
String value = "-";
this.header = header;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (null != response) {
this.header = header;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
Object value = null;
this.header = header;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
Object value = null;
import org.apache.catalina.connector.CometEventImpl;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
-import org.apache.catalina.util.LifecycleBase;
import org.apache.tomcat.util.res.StringManager;
/**
* Start this component and implement the requirements
- * of {@link LifecycleBase#startInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#startInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
/**
* Stop this component and implement the requirements
- * of {@link LifecycleBase#stopInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#stopInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
}
+ @Override
public void lifecycleEvent(LifecycleEvent event) {
if (Lifecycle.BEFORE_STOP_EVENT.equals(event.getType())) {
// The container is getting stopped, close all current connections
}
+ @Override
public void sessionCreated(HttpSessionEvent se) {
// NOOP
}
+ @Override
public void sessionDestroyed(HttpSessionEvent se) {
// Close all Comet connections associated with this session
Request[] reqs = (Request[])
}
};
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
ElementTimestampStruct eds = currentDate.get();
}
};
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
ElementTimestampStruct eds = currentTime.get();
public RequestHeaderElement(String header) {
this.header = header;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(wrap(request.getHeader(header)));
this.header = header;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(wrap(response.getHeader(header)));
public ServletContextElement(String attribute) {
this.attribute = attribute;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(wrap(request.getContext().getServletContext()
public CookieElement(String name) {
this.name = name;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
Cookie[] c = request.getCookies();
this.header = header;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
if (null != response) {
this.attribute = attribute;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(wrap(request.getAttribute(attribute)));
public SessionAttributeElement(String attribute) {
this.attribute = attribute;
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
HttpSession session = null;
return URLEncoder.encode(value);
}
+ @Override
public void addElement(StringBuilder buf, Date date, Request request,
Response response, long time) {
buf.append(wrap(urlEncode(request.getParameter(parameter))));
return new LocalAddrElement();
} else if ("dns".equals(nextToken)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
String value;
return new RequestURIElement();
} else if ("query".equals(token)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response,
long time) {
}
} else {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
String query = request.getQueryString();
protected AccessLogElement getServletRequestElement(String parameter) {
if ("authType".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap(request.getAuthType()));
};
} else if ("remoteUser".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap(request.getRemoteUser()));
};
} else if ("requestedSessionId".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap(request.getRequestedSessionId()));
};
} else if ("requestedSessionIdFromCookie".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap(""
};
} else if ("requestedSessionIdValid".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap("" + request.isRequestedSessionIdValid()));
};
} else if ("contentLength".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap("" + request.getContentLength()));
};
} else if ("characterEncoding".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap(request.getCharacterEncoding()));
};
} else if ("locale".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap(request.getLocale()));
};
} else if ("protocol".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap(request.getProtocol()));
};
} else if ("scheme".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(request.getScheme());
};
} else if ("secure".equals(parameter)) {
return new AccessLogElement() {
+ @Override
public void addElement(StringBuilder buf, Date date,
Request request, Response response, long time) {
buf.append(wrap("" + request.isSecure()));
import org.apache.catalina.LifecycleState;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
-import org.apache.catalina.util.LifecycleBase;
import org.apache.tomcat.util.ExceptionUtils;
import org.apache.tomcat.util.res.StringManager;
/**
* Start this component and implement the requirements
- * of {@link LifecycleBase#startInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#startInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
/**
* Stop this component and implement the requirements
- * of {@link LifecycleBase#stopInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#stopInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
session.recycle();
} else {
if (container.getLogger().isDebugEnabled())
- container.getLogger().debug("newsessionId store: " + store + " session: " +
- session + " valid: " + session.isValid() +
- " Staled: " +
- isSessionStale(session, System.currentTimeMillis()));
+ container.getLogger().debug("newsessionId store: " +
+ store + " session: " + session + " valid: " +
+ (session == null ? "N/A" : Boolean.toString(
+ session.isValid())) +
+ " Staled: " + isSessionStale(session,
+ System.currentTimeMillis()));
}
} else {
*/
protected boolean isSessionStale(Session session, long timeNow) {
- int maxInactiveInterval = session.getMaxInactiveInterval();
- if (maxInactiveInterval >= 0) {
- int timeIdle = // Truncate, do not round up
- (int) ((timeNow - session.getThisAccessedTime()) / 1000L);
- if (timeIdle >= maxInactiveInterval)
- return true;
+ if (session != null) {
+ int maxInactiveInterval = session.getMaxInactiveInterval();
+ if (maxInactiveInterval >= 0) {
+ int timeIdle = // Truncate, do not round up
+ (int) ((timeNow - session.getThisAccessedTime()) / 1000L);
+ if (timeIdle >= maxInactiveInterval)
+ return true;
+ }
}
return false;
import java.util.regex.PatternSyntaxException;
import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
* </tr>
* <tr>
* <td>httpServerPort</td>
- * <td>Value returned by {@link ServletRequest#getServerPort()} when the <code>protocolHeader</code> indicates <code>http</code> protocol</td>
+ * <td>Value returned by {@link javax.servlet.ServletRequest#getServerPort()} when the <code>protocolHeader</code> indicates <code>http</code> protocol</td>
* <td>N/A</td>
* <td>integer</td>
* <td>80</td>
* </tr>
* <tr>
* <td>httpsServerPort</td>
- * <td>Value returned by {@link ServletRequest#getServerPort()} when the <code>protocolHeader</code> indicates <code>https</code> protocol</td>
+ * <td>Value returned by {@link javax.servlet.ServletRequest#getServerPort()} when the <code>protocolHeader</code> indicates <code>https</code> protocol</td>
* <td>N/A</td>
* <td>integer</td>
* <td>443</td>
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
-
package org.apache.catalina.valves;
-
import java.io.IOException;
import java.util.concurrent.Semaphore;
import org.apache.catalina.LifecycleState;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
-import org.apache.catalina.util.LifecycleBase;
/**
/**
* Start this component and implement the requirements
- * of {@link LifecycleBase#startInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#startInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
/**
* Stop this component and implement the requirements
- * of {@link LifecycleBase#stopInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#stopInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
/**
- * Subclass friendly method to add error handling when a permit isn't granted.
+ * Subclass friendly method to add error handling when a permit isn't
+ * granted.
+ * @throws IOException
+ * @throws ServletException
*/
public void permitDenied(Request request, Response response)
throws IOException, ServletException {
+ // NO-OP by default
}
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.mbeans.MBeanUtils;
-import org.apache.catalina.util.LifecycleBase;
import org.apache.catalina.util.LifecycleMBeanBase;
import org.apache.juli.logging.Log;
import org.apache.tomcat.util.res.StringManager;
/**
* Return the Container with which this Valve is associated, if any.
*/
+ @Override
public Container getContainer() {
return (container);
}
+ @Override
public boolean isAsyncSupported() {
return asyncSupported;
}
*
* @param container The new associated container
*/
+ @Override
public void setContainer(Container container) {
this.container = container;
/**
* Return descriptive information about this Valve implementation.
*/
+ @Override
public String getInfo() {
return (info);
* Return the next Valve in this pipeline, or <code>null</code> if this
* is the last Valve in the pipeline.
*/
+ @Override
public Valve getNext() {
return (next);
*
* @param valve The new next valve
*/
+ @Override
public void setNext(Valve valve) {
this.next = valve;
* invoked inside the classloading context of this container. Unexpected
* throwables will be caught and logged.
*/
+ @Override
public void backgroundProcess() {
// NOOP by default
}
* @exception IOException if an input/output error occurs
* @exception ServletException if a servlet error occurs
*/
+ @Override
public abstract void invoke(Request request, Response response)
throws IOException, ServletException;
* @exception ServletException if a servlet error occurs, or is thrown
* by a subsequently invoked Valve, Filter, or Servlet
*/
+ @Override
public void event(Request request, Response response, CometEvent event)
throws IOException, ServletException {
// Perform the request
/**
* Start this component and implement the requirements
- * of {@link LifecycleBase#startInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#startInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used
/**
* Stop this component and implement the requirements
- * of {@link LifecycleBase#stopInternal()}.
+ * of {@link org.apache.catalina.util.LifecycleBase#stopInternal()}.
*
* @exception LifecycleException if this component detects a fatal error
* that prevents this component from being used