init
This commit is contained in:
191
java/org/apache/catalina/valves/rewrite/ResolverImpl.java
Normal file
191
java/org/apache/catalina/valves/rewrite/ResolverImpl.java
Normal file
@@ -0,0 +1,191 @@
|
||||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.apache.catalina.valves.rewrite;
|
||||
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.Calendar;
|
||||
|
||||
import org.apache.catalina.WebResource;
|
||||
import org.apache.catalina.WebResourceRoot;
|
||||
import org.apache.catalina.connector.Request;
|
||||
import org.apache.tomcat.util.http.FastHttpDateFormat;
|
||||
|
||||
public class ResolverImpl extends Resolver {
|
||||
|
||||
protected Request request = null;
|
||||
|
||||
public ResolverImpl(Request request) {
|
||||
this.request = request;
|
||||
}
|
||||
|
||||
/**
|
||||
* The following are not implemented:
|
||||
* - SERVER_ADMIN
|
||||
* - API_VERSION
|
||||
* - IS_SUBREQ
|
||||
*/
|
||||
@Override
|
||||
public String resolve(String key) {
|
||||
if (key.equals("HTTP_USER_AGENT")) {
|
||||
return request.getHeader("user-agent");
|
||||
} else if (key.equals("HTTP_REFERER")) {
|
||||
return request.getHeader("referer");
|
||||
} else if (key.equals("HTTP_COOKIE")) {
|
||||
return request.getHeader("cookie");
|
||||
} else if (key.equals("HTTP_FORWARDED")) {
|
||||
return request.getHeader("forwarded");
|
||||
} else if (key.equals("HTTP_HOST")) {
|
||||
String host = request.getHeader("host");
|
||||
if (host != null) {
|
||||
int index = host.indexOf(':');
|
||||
if (index != -1) {
|
||||
host = host.substring(0, index);
|
||||
}
|
||||
}
|
||||
return host;
|
||||
} else if (key.equals("HTTP_PROXY_CONNECTION")) {
|
||||
return request.getHeader("proxy-connection");
|
||||
} else if (key.equals("HTTP_ACCEPT")) {
|
||||
return request.getHeader("accept");
|
||||
} else if (key.equals("REMOTE_ADDR")) {
|
||||
return request.getRemoteAddr();
|
||||
} else if (key.equals("REMOTE_HOST")) {
|
||||
return request.getRemoteHost();
|
||||
} else if (key.equals("REMOTE_PORT")) {
|
||||
return String.valueOf(request.getRemotePort());
|
||||
} else if (key.equals("REMOTE_USER")) {
|
||||
return request.getRemoteUser();
|
||||
} else if (key.equals("REMOTE_IDENT")) {
|
||||
return request.getRemoteUser();
|
||||
} else if (key.equals("REQUEST_METHOD")) {
|
||||
return request.getMethod();
|
||||
} else if (key.equals("SCRIPT_FILENAME")) {
|
||||
return request.getServletContext().getRealPath(request.getServletPath());
|
||||
} else if (key.equals("REQUEST_PATH")) {
|
||||
return request.getRequestPathMB().toString();
|
||||
} else if (key.equals("CONTEXT_PATH")) {
|
||||
return request.getContextPath();
|
||||
} else if (key.equals("SERVLET_PATH")) {
|
||||
return emptyStringIfNull(request.getServletPath());
|
||||
} else if (key.equals("PATH_INFO")) {
|
||||
return emptyStringIfNull(request.getPathInfo());
|
||||
} else if (key.equals("QUERY_STRING")) {
|
||||
return emptyStringIfNull(request.getQueryString());
|
||||
} else if (key.equals("AUTH_TYPE")) {
|
||||
return request.getAuthType();
|
||||
} else if (key.equals("DOCUMENT_ROOT")) {
|
||||
return request.getServletContext().getRealPath("/");
|
||||
} else if (key.equals("SERVER_NAME")) {
|
||||
return request.getLocalName();
|
||||
} else if (key.equals("SERVER_ADDR")) {
|
||||
return request.getLocalAddr();
|
||||
} else if (key.equals("SERVER_PORT")) {
|
||||
return String.valueOf(request.getLocalPort());
|
||||
} else if (key.equals("SERVER_PROTOCOL")) {
|
||||
return request.getProtocol();
|
||||
} else if (key.equals("SERVER_SOFTWARE")) {
|
||||
return "tomcat";
|
||||
} else if (key.equals("THE_REQUEST")) {
|
||||
return request.getMethod() + " " + request.getRequestURI()
|
||||
+ " " + request.getProtocol();
|
||||
} else if (key.equals("REQUEST_URI")) {
|
||||
return request.getRequestURI();
|
||||
} else if (key.equals("REQUEST_FILENAME")) {
|
||||
return request.getPathTranslated();
|
||||
} else if (key.equals("HTTPS")) {
|
||||
return request.isSecure() ? "on" : "off";
|
||||
} else if (key.equals("TIME_YEAR")) {
|
||||
return String.valueOf(Calendar.getInstance().get(Calendar.YEAR));
|
||||
} else if (key.equals("TIME_MON")) {
|
||||
return String.valueOf(Calendar.getInstance().get(Calendar.MONTH));
|
||||
} else if (key.equals("TIME_DAY")) {
|
||||
return String.valueOf(Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
|
||||
} else if (key.equals("TIME_HOUR")) {
|
||||
return String.valueOf(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));
|
||||
} else if (key.equals("TIME_MIN")) {
|
||||
return String.valueOf(Calendar.getInstance().get(Calendar.MINUTE));
|
||||
} else if (key.equals("TIME_SEC")) {
|
||||
return String.valueOf(Calendar.getInstance().get(Calendar.SECOND));
|
||||
} else if (key.equals("TIME_WDAY")) {
|
||||
return String.valueOf(Calendar.getInstance().get(Calendar.DAY_OF_WEEK));
|
||||
} else if (key.equals("TIME")) {
|
||||
return FastHttpDateFormat.getCurrentDate();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String resolveEnv(String key) {
|
||||
Object result = request.getAttribute(key);
|
||||
return (result != null) ? result.toString() : System.getProperty(key);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String resolveSsl(String key) {
|
||||
// FIXME: Implement SSL environment variables
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String resolveHttp(String key) {
|
||||
String header = request.getHeader(key);
|
||||
if (header == null) {
|
||||
return "";
|
||||
} else {
|
||||
return header;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean resolveResource(int type, String name) {
|
||||
WebResourceRoot resources = request.getContext().getResources();
|
||||
WebResource resource = resources.getResource(name);
|
||||
if (!resource.exists()) {
|
||||
return false;
|
||||
} else {
|
||||
switch (type) {
|
||||
case 0:
|
||||
return resource.isDirectory();
|
||||
case 1:
|
||||
return resource.isFile();
|
||||
case 2:
|
||||
return resource.isFile() && resource.getContentLength() > 0;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static final String emptyStringIfNull(String value) {
|
||||
if (value == null) {
|
||||
return "";
|
||||
} else {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@Deprecated
|
||||
public String getUriEncoding() {
|
||||
return request.getConnector().getURIEncoding();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Charset getUriCharset() {
|
||||
return request.getConnector().getURICharset();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user