-----BEGIN PGP SIGNATURE----- iQJGBAABCgAwFiEEuM5N4hCA3PkD4WxA9RPEGeS50KwFAl7x1QQSHGVib3VyZ0Bh cGFjaGUub3JnAAoJEPUTxBnkudCs2xQP/jP7LMqzkaNXV7m6J1+s4UlUcUH85mhM XMT5BNhn+A5WULXDji6b7eiga/plosn3pX8xCEkm4K2jY2erETQFzc2DHXcm6+/J G3UQA1Cde/Y20oxg0+DVL5/G3WbidYmzUHsLjHBhtnu0xQpPZ+qnSS+hQmqj3Wna FZ2I9YoH1DnFmCWzKP0/2Ux53Tgih8gmMCwiTmcmc6akvFllRMTj+Maul+QwFgaG cOEZfPV3bZk+IWp/37PUyuJUlZeXDhe/fnk5u81vTddudeVqhBE7/xnhJKKJ10Kd 9Yk7E0CJ0mI/lcwVjasOEEOOtPoi944FvH1YJV04BFHav1pqY7R7FINlIgZQfCo5 an0eFTw+1TWh8kS4AVmoCNaKV0rpwhxiD1M6uqbXOBGB+E5M0bwvBR71kwbmVVTe tO6h7bydsANRlUp6ZlLMT8N7sYhqjdUat7z5zhRnJjeB20gDj7Wb/vJCtcuyBrEc aul0Oyec+J1D6SHlYr91TUTiNbFimao4Zvh2KWpSJxsLFZ0BOurIJMBnoYoKCkAf oapqzSWWdNFGvXJQd1ETBlnJ1lQwa6APYaITj9xHYXr1D9/FI62NddmS0IIt16gU 0qO9Iu25ZvtlLHYPtKAzuYTbUI8zYQKXz6gkcMMmJyIlRoAr83Qkxl93SBSBCpwP 23r6aRWcuGbi =lKgq -----END PGP SIGNATURE----- Merge tag 'debian/9.0.36-1' tomcat9 Debian release 9.0.36-1tags/devuan/9.0.36-1+devuan1
@@ -26,6 +26,7 @@ mvn.properties | |||
.ant-targets-build.xml | |||
.checkstyle | |||
.classpath | |||
.externalToolBuilders | |||
.fbprefs | |||
.project | |||
.settings | |||
@@ -36,7 +37,7 @@ mvn.properties | |||
*.asc | |||
*.jj | |||
*.tmp | |||
maven-ant-tasks-*.jar | |||
maven-resolver-ant-tasks-*.jar | |||
thumbs.db | |||
Thumbs.db | |||
bin/setenv.* | |||
@@ -36,6 +36,14 @@ | |||
# will be redirected. | |||
# Default is $CATALINA_BASE/logs/catalina.out | |||
# | |||
# CATALINA_OUT_CMD (Optional) Command which will be executed and receive | |||
# as its stdin the stdout and stderr from the Tomcat java | |||
# process. If CATALINA_OUT_CMD is set, the value of | |||
# CATALINA_OUT will be used as a named pipe. | |||
# No default. | |||
# Example (all one line) | |||
# CATALINA_OUT_CMD="/usr/bin/rotatelogs -f $CATALINA_BASE/logs/catalina.out.%Y-%m-%d.log 86400" | |||
# | |||
# CATALINA_OPTS (Optional) Java runtime options used when the "start", | |||
# "run" or "debug" command is executed. | |||
# Include here and not in JAVA_OPTS all options, that should | |||
@@ -463,7 +471,20 @@ elif [ "$1" = "start" ] ; then | |||
fi | |||
shift | |||
touch "$CATALINA_OUT" | |||
if [ -z "$CATALINA_OUT_CMD" ] ; then | |||
touch "$CATALINA_OUT" | |||
else | |||
if [ ! -e "$CATALINA_OUT" ]; then | |||
if ! mkfifo "$CATALINA_OUT"; then | |||
echo "cannot create named pipe $CATALINA_OUT. Start aborted." | |||
exit 1 | |||
fi | |||
elif [ ! -p "$CATALINA_OUT" ]; then | |||
echo "$CATALINA_OUT exists and is not a named pipe. Start aborted." | |||
exit 1 | |||
fi | |||
$CATALINA_OUT_CMD <"$CATALINA_OUT" & | |||
fi | |||
if [ "$1" = "-security" ] ; then | |||
if [ $have_tty -eq 1 ]; then | |||
echo "Using Security Manager" | |||
@@ -25,7 +25,7 @@ | |||
# ----- Version Control Flags ----- | |||
version.major=9 | |||
version.minor=0 | |||
version.build=34 | |||
version.build=36 | |||
version.patch=0 | |||
version.suffix= | |||
@@ -129,7 +129,7 @@ wsdl4j-lib.loc=${base-maven.loc}/wsdl4j/wsdl4j/${wsdl4j-lib.version}/wsdl4j-${ws | |||
# ----- Eclipse JDT, version 4.7 or later -----# | |||
# See https://cwiki.apache.org/confluence/display/TOMCAT/Managing+Tomcat%27s+Dependency+on+the+Eclipse+JDT+Core+Batch+Compiler | |||
# | |||
# Checksum is from "SHA512 Checksums for 4.13" link at | |||
# Checksum is from "SHA512 Checksums for 4.15" link at | |||
# http://download.eclipse.org/eclipse/downloads/drops4/R-4.15-202003050155/ | |||
# http://download.eclipse.org/eclipse/downloads/drops4/R-4.15-202003050155/checksum/eclipse-4.15-SUMSSHA512 | |||
# | |||
@@ -145,19 +145,19 @@ jdt.loc.1=http://archive.eclipse.org/eclipse/downloads/drops4/${jdt.release}/ecj | |||
jdt.loc.2=http://download.eclipse.org/eclipse/downloads/drops4/${jdt.release}/ecj-${jdt.version}.jar | |||
# ----- Tomcat native library ----- | |||
tomcat-native.version=1.2.23 | |||
tomcat-native.version=1.2.24 | |||
tomcat-native.src.checksum.enabled=true | |||
tomcat-native.src.checksum.algorithm=SHA-512 | |||
tomcat-native.src.checksum.value=89a0363961d322a87f4e752f4727f54f28ac6e4ad10fa21b6b7390c62b041d4068672d95495d9233c1cad7d6c1dc3c85fbd0186894085b3b94e476876af160ee | |||
tomcat-native.src.checksum.value=5dae151a60f8bd5a9a29d63eca838c77174426025ee65a826f0698943494dd3656d50bcd417e220a926b9ce111ea167043d4b806264030e951873d06767b3d6f | |||
tomcat-native.win.checksum.enabled=true | |||
tomcat-native.win.checksum.algorithm=SHA-512 | |||
tomcat-native.win.checksum.value=b5d91d709241fea5f18fbaf2eb1dbad3c3014309ac72dfc10c0eb7c2f926a8e37a4c326ce251552bbd2b1f15b86c84ae72c33a259cc051765ab4322c91b5721b | |||
tomcat-native.win.checksum.value=c2d581f1f602dce61abc36370ce485c805b90863301555fc3d44362b655f34f950d0096fad22895374086f33d4505792c27f83fe35d4aeb87a08215bea8ae74a | |||
tomcat-native.home=${base.path}/tomcat-native-${tomcat-native.version} | |||
tomcat-native.tar.gz=${tomcat-native.home}/tomcat-native.tar.gz | |||
tomcat-native.loc.1=${base-tomcat.loc.1}/tomcat-connectors/native/${tomcat-native.version}/source/tomcat-native-${tomcat-native.version}-src.tar.gz | |||
tomcat-native.loc.2=${base-tomcat.loc.2}/tomcat-connectors/native/${tomcat-native.version}/source/tomcat-native-${tomcat-native.version}-src.tar.gz | |||
tomcat-native.win.1=${base-tomcat.loc.1}/tomcat-connectors/native/${tomcat-native.version}/binaries/tomcat-native-${tomcat-native.version}-openssl-1.1.1c-win32-bin.zip | |||
tomcat-native.win.2=${base-tomcat.loc.2}/tomcat-connectors/native/${tomcat-native.version}/binaries/tomcat-native-${tomcat-native.version}-openssl-1.1.1c-win32-bin.zip | |||
tomcat-native.win.1=${base-tomcat.loc.1}/tomcat-connectors/native/${tomcat-native.version}/binaries/tomcat-native-${tomcat-native.version}-openssl-1.1.1g-win32-bin.zip | |||
tomcat-native.win.2=${base-tomcat.loc.2}/tomcat-connectors/native/${tomcat-native.version}/binaries/tomcat-native-${tomcat-native.version}-openssl-1.1.1g-win32-bin.zip | |||
# ----- NSIS, version 3.0 or later ----- | |||
nsis.version=3.04 | |||
@@ -204,10 +204,10 @@ commons-daemon.native.win.loc.1=${base-commons.loc.1}/daemon/binaries/windows/co | |||
commons-daemon.native.win.loc.2=${base-commons.loc.2}/daemon/binaries/windows/commons-daemon-${commons-daemon.version}-bin-windows.zip | |||
# ----- JUnit Unit Test Suite, version 4.11 or later ----- | |||
junit.version=4.12 | |||
junit.version=4.13 | |||
junit.checksum.enabled=true | |||
junit.checksum.algorithm=MD5|SHA-1 | |||
junit.checksum.value=5b38c40c97fbd0adee29f91e60405584|2973d150c0dc1fefe998f834810d68f278ea58ec | |||
junit.checksum.value=5da6445d7b80aba2623e73d4561dcfde|e49ccba652b735c93bd6e6f59760d8254cf597dd | |||
junit.home=${base.path}/junit-${junit.version} | |||
junit.jar=${junit.home}/junit-${junit.version}.jar | |||
junit.loc=${base-maven.loc}/junit/junit/${junit.version}/junit-${junit.version}.jar | |||
@@ -288,16 +288,17 @@ saaj-api.loc=${base-maven.loc}/javax/xml/soap/saaj-api/${saaj-api.version}/saaj- | |||
# ----- bnd & bndlib, version 4.0.0 or later ----- | |||
# ----- provides OSGI metadata for JARs ----- | |||
bnd.version=4.2.0 | |||
bnd.version=5.1.0 | |||
# checksums for biz.aQute.bnd-4.2.0.jar, biz.aQute.bndlib-4.2.0.jar | |||
# checksums for biz.aQute.bnd-5.1.0.jar | |||
bnd.checksum.enabled=true | |||
bnd.checksum.algorithm=MD5|SHA-1 | |||
bnd.checksum.value=ca26a671ea67bf75d83b1588bdd68923|d4bc96b2619f95e596bbf3f725f3b077e96c5d43 | |||
bnd.checksum.value=477684fd83707666cc84a766b147ed0c|9069bc1afad9201e3dc2efe62c0d5193777d16ae | |||
# checksums for biz.aQute.bndlib-5.1.0.jar | |||
bndlib.checksum.enabled=true | |||
bndlib.checksum.algorithm=MD5|SHA-1 | |||
bndlib.checksum.value=7519e890783ade99bb74608d0efbf8c4|c4fa30ac11cc0bf27b1f706ac8ebae8cec358e77 | |||
bndlib.checksum.value=59dfe87f09e3f03be891327a91430182|30e119e5b3ae63dbb86532490855707b009e1b2e | |||
bnd.home=${base.path}/bnd-${bnd.version} | |||
bnd.jar=${bnd.home}/biz.aQute.bnd-${bnd.version}.jar | |||
@@ -1389,22 +1389,33 @@ | |||
filesId="files.tomcat-embed-core" | |||
notice="${tomcat.manifests}/servlet-api.jar.notice" | |||
license="${tomcat.manifests}/servlet-api.jar.license" | |||
addOSGi="true" /> | |||
addOSGi="true" | |||
addGraal="true" | |||
graalPrefix="org.apache.tomcat.embed/tomcat-embed-core" | |||
graalFiles="res/graal/tomcat-embed-core/native-image"/> | |||
<jarIt jarfile="${tomcat-embed-jasper.jar}" | |||
filesDir="${tomcat.classes}" | |||
filesId="files.tomcat-embed-jasper" | |||
meta-inf="${tomcat.manifests}/jasper.jar" | |||
addOSGi="true" /> | |||
addOSGi="true" | |||
addGraal="true" | |||
graalPrefix="org.apache.tomcat.embed/tomcat-embed-jasper" | |||
graalFiles="res/graal/tomcat-embed-jasper/native-image"/> | |||
<jarIt jarfile="${tomcat-embed-el.jar}" | |||
filesDir="${tomcat.classes}" | |||
filesId="files.tomcat-embed-el" | |||
addOSGi="true" /> | |||
addOSGi="true" | |||
addGraal="true" | |||
graalPrefix="org.apache.tomcat.embed/tomcat-embed-el" | |||
graalFiles="res/graal/tomcat-embed-el/native-image"/> | |||
<jarIt jarfile="${tomcat-embed-websocket.jar}" | |||
filesDir="${tomcat.classes}" | |||
filesId="files.tomcat-embed-websocket" | |||
meta-inf="${tomcat.manifests}/tomcat-websocket.jar" | |||
addOSGi="true" /> | |||
addOSGi="true" | |||
addGraal="true" | |||
graalPrefix="org.apache.tomcat.embed/tomcat-embed-websocket" | |||
graalFiles="res/graal/tomcat-embed-websocket/native-image"/> | |||
</target> | |||
<target name="embed-sources" | |||
@@ -2140,7 +2151,7 @@ Apache Tomcat ${version} native binaries for Win64 AMD64/EMT64 platform. | |||
</and> | |||
<filename name="**/*.asc" /> | |||
<filename name="**/*.tmp" /> | |||
<filename name="**/maven-ant-tasks-*.jar" /> | |||
<filename name="**/maven-resolver-ant-tasks-*.jar" /> | |||
<filename name="**/thumbs.db" /> | |||
<filename name="**/Thumbs.db" /> | |||
<filename name="*.launch"/> | |||
@@ -3339,6 +3350,12 @@ Read the Building page on the Apache Tomcat documentation site for details on ho | |||
default="${tomcat.manifests}/default" /> | |||
<attribute name="addOSGi" description="generate OSGi metadata" | |||
default="false" /> | |||
<attribute name="addGraal" description="add Graal resource/reflection files if set" | |||
default="false" /> | |||
<attribute name="graalPrefix" description="Graal resource/reflection location prefix (group_id/artifact_id)" | |||
default="" /> | |||
<attribute name="graalFiles" description="Graal resource/reflection file location" | |||
default="" /> | |||
<sequential> | |||
<jar jarfile="@{jarfile}" manifest="@{manifest}"> | |||
<fileset dir="@{filesDir}"> | |||
@@ -3356,6 +3373,12 @@ Read the Building page on the Apache Tomcat documentation site for details on ho | |||
<param name="jarfile" value="@{jarfile}" /> | |||
<param name="addOSGi" value="@{addOSGi}" /> | |||
</antcall> | |||
<antcall target="add-graal"> | |||
<param name="jarfile" value="@{jarfile}" /> | |||
<param name="addGraal" value="@{addGraal}" /> | |||
<param name="graalFiles" value="@{graalFiles}" /> | |||
<param name="graalPrefix" value="@{graalPrefix}" /> | |||
</antcall> | |||
</sequential> | |||
</macrodef> | |||
@@ -3368,6 +3391,13 @@ Read the Building page on the Apache Tomcat documentation site for details on ho | |||
<move file="${jarfile}.tmp" tofile="${jarfile}" /> | |||
</target> | |||
<target name="add-graal" if="${addGraal}"> | |||
<echo message="add-graal ${addGraal} ${jarfile} ${graalFiles} ${graalPrefix}"></echo> | |||
<zip destfile="${jarfile}" update="true"> | |||
<zipfileset dir="${basedir}/${graalFiles}" prefix="META-INF/native-image/${graalPrefix}" includes="*.*"/> | |||
</zip> | |||
</target> | |||
<!-- Macro, used to create checksum and signature files --> | |||
<!-- Requires 'file' as a parameter. --> | |||
<macrodef name="hashAndSign"> | |||
@@ -39,7 +39,7 @@ grant codeBase "file:${java.home}/jre/lib/ext/-" { | |||
permission java.security.AllPermission; | |||
}; | |||
// These permissions apply to javac when ${java.home] points at $JAVA_HOME/jre | |||
// These permissions apply to javac when ${java.home} points at $JAVA_HOME/jre | |||
grant codeBase "file:${java.home}/../lib/-" { | |||
permission java.security.AllPermission; | |||
}; | |||
@@ -24,21 +24,21 @@ | |||
version="1.0"> | |||
<xs:element name="tomcat-users"> | |||
<xs:complexType> | |||
<xs:sequence> | |||
<xs:element name="role" minOccurs="0" maxOccurs="unbounded"> | |||
<xs:choice minOccurs="0" maxOccurs="unbounded"> | |||
<xs:element name="role"> | |||
<xs:complexType> | |||
<xs:attribute name="rolename" use="required" type="users:entityname" /> | |||
<xs:attribute name="description" type="xs:string" /> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="group" minOccurs="0" maxOccurs="unbounded"> | |||
<xs:element name="group"> | |||
<xs:complexType> | |||
<xs:attribute name="groupname" use="required" type="users:entityname" /> | |||
<xs:attribute name="description" type="xs:string" /> | |||
<xs:attribute name="roles" type="xs:string" /> | |||
</xs:complexType> | |||
</xs:element> | |||
<xs:element name="user" minOccurs="0" maxOccurs="unbounded"> | |||
<xs:element name="user"> | |||
<xs:complexType> | |||
<xs:attribute name="username" use="required" type="users:entityname" /> | |||
<xs:attribute name="fullname" type="xs:string" /> | |||
@@ -47,7 +47,7 @@ | |||
<xs:attribute name="groups" type="xs:string" /> | |||
</xs:complexType> | |||
</xs:element> | |||
</xs:sequence> | |||
</xs:choice> | |||
<xs:attribute name="version" type="xs:string" /> | |||
</xs:complexType> | |||
</xs:element> | |||
@@ -56,4 +56,4 @@ | |||
<xs:minLength value="1"/> | |||
</xs:restriction> | |||
</xs:simpleType> | |||
</xs:schema> | |||
</xs:schema> |
@@ -1,3 +1,19 @@ | |||
tomcat9 (9.0.36-1) unstable; urgency=medium | |||
* New upstream release | |||
- Refreshed the patches | |||
* Grant write access on /var/log/tomcat9 to the adm group (LP: #1861881) | |||
-- Emmanuel Bourg <ebourg@apache.org> Tue, 23 Jun 2020 11:47:47 +0200 | |||
tomcat9 (9.0.35-1) unstable; urgency=medium | |||
* New upstream release | |||
- Fixes CVE-2020-9484: Remote Code Execution via session persistence (Closes: #961209) | |||
- Refreshed the patches | |||
-- Emmanuel Bourg <ebourg@apache.org> Thu, 21 May 2020 15:50:03 +0200 | |||
tomcat9 (9.0.34-1+devuan1) unstable; urgency=medium | |||
* Merge debian version 9.0.34-1 | |||
@@ -3,7 +3,7 @@ Author: Emmanuel Bourg <ebourg@apache.org> | |||
Forwarded: not-needed | |||
--- a/build.xml | |||
+++ b/build.xml | |||
@@ -1545,8 +1545,10 @@ | |||
@@ -1556,8 +1556,10 @@ | |||
</filterchain> | |||
</concat> | |||
@@ -9,7 +9,7 @@ Bug-Debian: http://bugs.debian.org/585379 | |||
Forwarded: not-needed | |||
--- a/bin/catalina.sh | |||
+++ b/bin/catalina.sh | |||
@@ -376,7 +376,7 @@ | |||
@@ -384,7 +384,7 @@ | |||
-classpath "$CLASSPATH" \ | |||
-sourcepath "$CATALINA_HOME"/../../java \ | |||
-Djava.security.manager \ | |||
@@ -18,7 +18,7 @@ Forwarded: not-needed | |||
-Dcatalina.base="$CATALINA_BASE" \ | |||
-Dcatalina.home="$CATALINA_HOME" \ | |||
-Djava.io.tmpdir="$CATALINA_TMPDIR" \ | |||
@@ -405,7 +405,7 @@ | |||
@@ -413,7 +413,7 @@ | |||
-D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ | |||
-classpath "\"$CLASSPATH\"" \ | |||
-Djava.security.manager \ | |||
@@ -27,7 +27,7 @@ Forwarded: not-needed | |||
-Dcatalina.base="\"$CATALINA_BASE\"" \ | |||
-Dcatalina.home="\"$CATALINA_HOME\"" \ | |||
-Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ | |||
@@ -473,7 +473,7 @@ | |||
@@ -494,7 +494,7 @@ | |||
-D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ | |||
-classpath "\"$CLASSPATH\"" \ | |||
-Djava.security.manager \ | |||
@@ -4,7 +4,7 @@ Author: Emmanuel Bourg <ebourg@apache.org> | |||
Forwarded: not-needed | |||
--- a/test/org/apache/tomcat/util/net/openssl/ciphers/TesterOpenSSL.java | |||
+++ b/test/org/apache/tomcat/util/net/openssl/ciphers/TesterOpenSSL.java | |||
@@ -106,6 +106,23 @@ | |||
@@ -107,6 +107,23 @@ | |||
unimplemented.add(Cipher.SSL2_RC4_128_EXPORT40_WITH_MD5); | |||
unimplemented.add(Cipher.SSL2_IDEA_128_CBC_WITH_MD5); | |||
unimplemented.add(Cipher.SSL2_DES_192_EDE3_CBC_WITH_MD5); | |||
@@ -75,7 +75,7 @@ case "$1" in | |||
# Grant read/write access to tomcat to the log and cache directories | |||
chown -Rh $TOMCAT_USER:adm /var/log/tomcat9/ | |||
chmod 2750 /var/log/tomcat9/ | |||
chmod 2760 /var/log/tomcat9/ | |||
chown -Rh $TOMCAT_USER:$TOMCAT_GROUP /var/cache/tomcat9/ | |||
chmod 750 /var/cache/tomcat9/ | |||
;; | |||
@@ -3,4 +3,4 @@ | |||
# See tmpfiles.d(5) for details | |||
# Type Path Mode UID GID Age Argument | |||
d /var/log/tomcat9 2750 tomcat adm - | |||
d /var/log/tomcat9 2760 tomcat adm - |
@@ -188,9 +188,9 @@ public class BeanELResolver extends ELResolver { | |||
try { | |||
BeanInfo info = Introspector.getBeanInfo(base.getClass()); | |||
PropertyDescriptor[] pds = info.getPropertyDescriptors(); | |||
for (int i = 0; i < pds.length; i++) { | |||
pds[i].setValue(RESOLVABLE_AT_DESIGN_TIME, Boolean.TRUE); | |||
pds[i].setValue(TYPE, pds[i].getPropertyType()); | |||
for (PropertyDescriptor pd : pds) { | |||
pd.setValue(RESOLVABLE_AT_DESIGN_TIME, Boolean.TRUE); | |||
pd.setValue(TYPE, pd.getPropertyType()); | |||
} | |||
return Arrays.asList((FeatureDescriptor[]) pds).iterator(); | |||
} catch (IntrospectionException e) { | |||
@@ -19,6 +19,8 @@ package javax.el; | |||
import java.lang.reflect.Field; | |||
import java.lang.reflect.Method; | |||
import java.lang.reflect.Modifier; | |||
import java.security.AccessController; | |||
import java.security.PrivilegedAction; | |||
import java.util.Collections; | |||
import java.util.HashMap; | |||
import java.util.HashSet; | |||
@@ -31,6 +33,8 @@ import java.util.concurrent.ConcurrentHashMap; | |||
*/ | |||
public class ImportHandler { | |||
private static final boolean IS_SECURITY_ENABLED = (System.getSecurityManager() != null); | |||
private static final Map<String,Set<String>> standardPackages = new HashMap<>(); | |||
static { | |||
@@ -452,8 +456,18 @@ public class ImportHandler { | |||
* for the case where the class does exist is a lot less than the | |||
* overhead we save by not calling loadClass(). | |||
*/ | |||
if (cl.getResource(path) == null) { | |||
return null; | |||
if (IS_SECURITY_ENABLED) { | |||
// Webapps don't have read permission for JAVA_HOME (and | |||
// possibly other sources of classes). Only need to know if the | |||
// class exists at this point. Class loading occurs with | |||
// standard SecurityManager policy next. | |||
if (!AccessController.doPrivileged(new PrivilegedResourceExists(cl, path)).booleanValue()) { | |||
return null; | |||
} | |||
} else { | |||
if (cl.getResource(path) == null) { | |||
return null; | |||
} | |||
} | |||
} catch (ClassCircularityError cce) { | |||
// May happen under a security manager. Ignore it and try loading | |||
@@ -489,4 +503,25 @@ public class ImportHandler { | |||
*/ | |||
private static class NotFound { | |||
} | |||
private static class PrivilegedResourceExists implements PrivilegedAction<Boolean> { | |||
private final ClassLoader cl; | |||
private final String name; | |||
public PrivilegedResourceExists(ClassLoader cl, String name) { | |||
this.cl = cl; | |||
this.name = name; | |||
} | |||
@Override | |||
public Boolean run() { | |||
if (cl.getResource(name) == null) { | |||
return Boolean.FALSE; | |||
} else { | |||
return Boolean.TRUE; | |||
} | |||
} | |||
} | |||
} |
@@ -65,8 +65,7 @@ public class LambdaExpression { | |||
// Build the argument map | |||
// Start with the arguments from any outer expressions so if there is | |||
// any overlap the local arguments have priority | |||
Map<String,Object> lambdaArguments = new HashMap<>(); | |||
lambdaArguments.putAll(nestedArguments); | |||
Map<String, Object> lambdaArguments = new HashMap<>(nestedArguments); | |||
for (int i = 0; i < formalParamCount; i++) { | |||
lambdaArguments.put(formalParameters.get(i), args[i]); | |||
} | |||
@@ -29,7 +29,7 @@ expressionFactory.readFailed=[{0}]ใฎ่ชญใฟๅใใซๅคฑๆใใพใใ | |||
importHandler.ambiguousImport=ใฏใฉใน [{0}] ใฏใใงใซใคใณใใผใใใ [{1}] ใจ่ก็ชใใใใใคใณใใผใใงใใพใใใ | |||
importHandler.ambiguousStaticImport=static import [{0}] ใฏใใงใซใคใณใใผใใใ [{1}] ใจ่ก็ชใใใใๅฆ็ใงใใพใใใ | |||
importHandler.classNotFound=ๅญๅจใใชใใฏใฉใน [{0}] ใฏใคใณใใผใใงใใพใใใ | |||
importHandler.invalidClass=ใฏใฉใน[{0}]ใฏใใใใชใใฏใง้abstract ใงใใใใคใณใฟใใงใผในใงใฏใชใใ | |||
importHandler.invalidClass=ใฏใฉใน[{0}]ใฏ publicใงใ(Java 9ไปฅ้ใงใฏ) ใจใฏในใใผใใใใใใใฑใผใธไธญใซใใใ้abstract ใง้ใคใณใฟใใงใผในใงใใๅฟ ่ฆใใใใพใ | |||
importHandler.invalidClassName=ใคใณใใผใใใใฏใฉในใฎๅๅ[{0}]ใซใฏใใใฑใผใธใๅซใพใใฆใใๅฟ ่ฆใใใใพใ | |||
importHandler.invalidClassNameForStatic=ใฏใฉใน [{0}] ใฎ static import [{1}] ใฏไธๆญฃใงใใ | |||
importHandler.invalidStaticName=ใคใณใใผใใใstaticใกใฝใใใพใใฏใใฃใผใซใใฎๅๅ[{0}]ใซใฏใฏใฉในใๅซใพใใฆใใๅฟ ่ฆใใใใพใใ | |||
@@ -45,7 +45,7 @@ propertyReadError=ใฟใคใ[{0}]ใฎ[{1}]ใฎ่ชญใฟๅใใจใฉใผ | |||
propertyWriteError=ใฟใคใ[{0}]ใฎ[{1}]ใธใฎๆธใ่พผใฟใจใฉใผ | |||
staticFieldELResolver.methodNotFound=ใฏใฉใน[{1}]ใซ[{0}]ใจใใๅๅใซไธ่ดใใpublic staticใกใฝใใใ่ฆใคใใใพใใใ | |||
staticFieldELResolver.notFound=ใฏใฉใน[{1}]ใซ[{0}]ใจใใๅๅใฎpublic staticใใฃใผใซใใ่ฆใคใใใพใใใงใใใ | |||
staticFieldELResolver.notFound=(Java 9 ไปฅ้ใงใฏใจใฏในใใผใใใใ) ใฏใฉใน[{1}]ใซ[{0}]ใจใใๅๅใฎpublic staticใใฃใผใซใใ่ฆใคใใใพใใใงใใใ | |||
staticFieldELResolver.notWriteable=้็ใใฃใผใซใ๏ผใใฎๅ ดๅใใฏใฉใน[{1}]ใฎใใฃใผใซใ[{0}๏ผใธใฎๆธใ่พผใฟใฏ่จฑๅฏใใใฆใใพใใใ | |||
util.method.ambiguous=ๆๆงใใฎใชใใกใฝใใใ่ฆใคใใใใจใใงใใพใใ๏ผ{0}ใ{1}๏ผ{2}๏ผ | |||
@@ -23,12 +23,14 @@ elProcessor.defineFunctionNoMethod=ๆ ๆณๆพๅฐ็ฑป[{1}]็ๅ ฌๅ ฑ้ๆๆนๆณ[{0} | |||
elProcessor.defineFunctionNullParams=ไธไธชๆๅคไธช่พๅ ฅๅๆฐไธบnull | |||
expressionFactory.cannotCreate=ๆ ๆณๅๅปบ็ฑปๅไธบ[{0}]็่กจ่พพๅผๅทฅๅ | |||
expressionFactory.cannotFind=ๆพไธๅฐ็ฑปๅไธบ[{0}]็ExpressionFactory | |||
expressionFactory.readFailed=ๆ ๆณ่ฏปๅ[{0}] | |||
importHandler.ambiguousImport=ๆ ๆณๅฏผๅ ฅ็ฑป[{0}]๏ผๅ ไธบๅฎไธๅทฒๅฏผๅ ฅ็[{1}]ๅฒ็ช | |||
importHandler.ambiguousStaticImport=ๆ ๆณๅค็้ๆๅฏผๅ ฅ[{0}]๏ผๅ ไธบๅฎไธๅทฒๅฏผๅ ฅ็[{1}]ๅฒ็ช | |||
importHandler.classNotFound=ๆ ๆณๅฏผๅ ฅ็ฑป[{0}]๏ผๅ ไธบๆ ๆณๆพๅฐๅฎ | |||
importHandler.invalidClass=็ฑป[{0}]ๅฟ ้กปๆฏๅ ฌๅ ฑ็ใ้ๆฝ่ฑก็ใ้ๆฅๅฃไธ๏ผๅฏนไบJava 9+๏ผๅจไธไธชๅฏผๅบๅ | |||
importHandler.invalidClassName=่ฆๅฏผๅ ฅ็็ฑป็ๅ็งฐ[{0}]ๅฟ ้กปๅ ๅซไธไธชๅ ใ | |||
importHandler.invalidClassNameForStatic=ไธบ static import [{1}] ๆๅฎ็็ฑป [{0}] ไธๅฏ็จ | |||
importHandler.invalidStaticName=ๅฏผๅ ฅ [{0}] ็้ๆๆนๆณๆๅญๆฎตๅ็งฐๅฟ ้กปๅ ๅซ็ฑป | |||
importHandler.staticNotFound=ๅฏผๅ ฅ[{2}]็็ฑป[{1}]ไธญๆพไธๅฐ้ๆๅฏผๅ ฅ[{0}] | |||
@@ -380,11 +380,11 @@ class Util { | |||
private static final String paramString(Class<?>[] types) { | |||
if (types != null) { | |||
StringBuilder sb = new StringBuilder(); | |||
for (int i = 0; i < types.length; i++) { | |||
if (types[i] == null) { | |||
for (Class<?> type : types) { | |||
if (type == null) { | |||
sb.append("null, "); | |||
} else { | |||
sb.append(types[i].getName()).append(", "); | |||
sb.append(type.getName()).append(", "); | |||
} | |||
} | |||
if (sb.length() > 2) { | |||
@@ -548,11 +548,11 @@ class Util { | |||
(jreCompat.canAcccess(base, m) || base != null && jreCompat.canAcccess(null, m)))) { | |||
return m; | |||
} | |||
Class<?>[] inf = type.getInterfaces(); | |||
Class<?>[] interfaces = type.getInterfaces(); | |||
Method mp = null; | |||
for (int i = 0; i < inf.length; i++) { | |||
for (Class<?> iface : interfaces) { | |||
try { | |||
mp = inf[i].getMethod(m.getName(), m.getParameterTypes()); | |||
mp = iface.getMethod(m.getName(), m.getParameterTypes()); | |||
mp = getMethod(mp.getDeclaringClass(), base, mp); | |||
if (mp != null) { | |||
return mp; | |||
@@ -19,6 +19,7 @@ httpConstraintElement.invalidRolesDeny=ไฝฟ็จ DENY ๆถๅฏ่ฝๆชๆๅฎ่ง่ฒ | |||
httpMethodConstraintElement.invalidMethod=ๆ ๆ็HTTP.ๆนๆณ | |||
value.false=ๅฆ | |||
value.true=true | |||
wrapper.nullRequest=่ฏทๆฑไธ่ฝไธบ็ฉบ | |||
@@ -93,13 +93,13 @@ public class ServletSecurityElement extends HttpConstraintElement { | |||
List<HttpMethodConstraintElement> l = new ArrayList<>(); | |||
HttpMethodConstraint[] constraints = annotation.httpMethodConstraints(); | |||
if (constraints != null) { | |||
for (int i = 0; i < constraints.length; i++) { | |||
for (HttpMethodConstraint constraint : constraints) { | |||
HttpMethodConstraintElement e = | |||
new HttpMethodConstraintElement(constraints[i].value(), | |||
new HttpConstraintElement( | |||
constraints[i].emptyRoleSemantic(), | |||
constraints[i].transportGuarantee(), | |||
constraints[i].rolesAllowed())); | |||
new HttpMethodConstraintElement(constraint.value(), | |||
new HttpConstraintElement( | |||
constraint.emptyRoleSemantic(), | |||
constraint.transportGuarantee(), | |||
constraint.rolesAllowed())); | |||
l.add(e); | |||
} | |||
} | |||
@@ -107,14 +107,12 @@ public class ServletSecurityElement extends HttpConstraintElement { | |||
} | |||
public Collection<HttpMethodConstraintElement> getHttpMethodConstraints() { | |||
Collection<HttpMethodConstraintElement> result = new HashSet<>(); | |||
result.addAll(methodConstraints.values()); | |||
Collection<HttpMethodConstraintElement> result = new HashSet<>(methodConstraints.values()); | |||
return result; | |||
} | |||
public Collection<String> getMethodNames() { | |||
Collection<String> result = new HashSet<>(); | |||
result.addAll(methodConstraints.keySet()); | |||
Collection<String> result = new HashSet<>(methodConstraints.keySet()); | |||
return result; | |||
} | |||
@@ -14,6 +14,8 @@ | |||
# limitations under the License. | |||
err.cookie_name_blank=Cookieๅ็งฐไธ่ฝไธบnullๆ้ถ้ฟๅบฆ | |||
err.cookie_name_is_token=Cookie name[{0}]ๆฏไธไธชไฟ็ไปค็ | |||
err.io.indexOutOfBounds=ไธบๅคงๅฐไธบ[{2}]็ๆฐ็ปๆๅฎ็ๅ็งป้[{0}]ๅ/ๆ้ฟๅบฆ[{1}]ๆ ๆใ | |||
err.io.nullArray=Nullๅจwriteๆนๆณไธญไผ ้็ปๅญ่ๆฐ็ป | |||
err.io.short_read=็ญ.่ฏป | |||
@@ -65,7 +65,7 @@ public interface JspApplicationContext { | |||
* if called after the application's | |||
* <code>ServletContextListeners</code> have been initialized. | |||
*/ | |||
public void addELResolver(ELResolver resolver) throws IllegalStateException; | |||
public void addELResolver(ELResolver resolver); | |||
/** | |||
* <p> | |||
@@ -162,12 +162,12 @@ public class ImplicitObjectELResolver extends ELResolver { | |||
public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext context, Object base) { | |||
List<FeatureDescriptor> feats = new ArrayList<>(SCOPE_NAMES.length); | |||
FeatureDescriptor feat; | |||
for (int i = 0; i < SCOPE_NAMES.length; i++) { | |||
for (String scopeName : SCOPE_NAMES) { | |||
feat = new FeatureDescriptor(); | |||
feat.setDisplayName(SCOPE_NAMES[i]); | |||
feat.setDisplayName(scopeName); | |||
feat.setExpert(false); | |||
feat.setHidden(false); | |||
feat.setName(SCOPE_NAMES[i]); | |||
feat.setName(scopeName); | |||
feat.setPreferred(true); | |||
feat.setValue(RESOLVABLE_AT_DESIGN_TIME, Boolean.TRUE); | |||
feat.setValue(TYPE, String.class); | |||
@@ -254,12 +254,11 @@ public class ImplicitObjectELResolver extends ELResolver { | |||
this.cookie = new ScopeMap<Cookie>() { | |||
@Override | |||
protected Enumeration<String> getAttributeNames() { | |||
Cookie[] c = ((HttpServletRequest) page.getRequest()) | |||
.getCookies(); | |||
if (c != null) { | |||
Cookie[] cookies = ((HttpServletRequest) page.getRequest()).getCookies(); | |||
if (cookies != null) { | |||
Vector<String> v = new Vector<>(); | |||
for (int i = 0; i < c.length; i++) { | |||
v.add(c[i].getName()); | |||
for (Cookie cookie : cookies) { | |||
v.add(cookie.getName()); | |||
} | |||
return v.elements(); | |||
} | |||
@@ -268,12 +267,11 @@ public class ImplicitObjectELResolver extends ELResolver { | |||
@Override | |||
protected Cookie getAttribute(String name) { | |||
Cookie[] c = ((HttpServletRequest) page.getRequest()) | |||
.getCookies(); | |||
if (c != null) { | |||
for (int i = 0; i < c.length; i++) { | |||
if (name.equals(c[i].getName())) { | |||
return c[i]; | |||
Cookie[] cookies = ((HttpServletRequest) page.getRequest()).getCookies(); | |||
if (cookies != null) { | |||
for (Cookie cookie : cookies) { | |||
if (name.equals(cookie.getName())) { | |||
return cookie; | |||
} | |||
} | |||
} | |||
@@ -323,7 +321,7 @@ public class ImplicitObjectELResolver extends ELResolver { | |||
while (e.hasMoreElements()) { | |||
list.add(e.nextElement()); | |||
} | |||
return list.toArray(new String[list.size()]); | |||
return list.toArray(new String[0]); | |||
} | |||
return null; | |||
} | |||
@@ -193,8 +193,7 @@ public class SimpleTagSupport implements SimpleTag { | |||
JspTag parent = null; | |||
if( from instanceof SimpleTag ) { | |||
parent = ((SimpleTag)from).getParent(); | |||
} | |||
else if( from instanceof Tag ) { | |||
} else if( from instanceof Tag ) { | |||
parent = ((Tag)from).getParent(); | |||
} | |||
if (parent == null) { | |||
@@ -167,14 +167,14 @@ public class TagAttributeInfo { | |||
* Convenience static method that goes through an array of TagAttributeInfo | |||
* objects and looks for "id". | |||
* | |||
* @param a | |||
* @param tagAttributeInfos | |||
* An array of TagAttributeInfo | |||
* @return The TagAttributeInfo reference with name "id" | |||
*/ | |||
public static TagAttributeInfo getIdAttribute(TagAttributeInfo a[]) { | |||
for (int i = 0; i < a.length; i++) { | |||
if (a[i].getName().equals(ID)) { | |||
return a[i]; | |||
public static TagAttributeInfo getIdAttribute(TagAttributeInfo[] tagAttributeInfos) { | |||
for (TagAttributeInfo tagAttributeInfo : tagAttributeInfos) { | |||
if (tagAttributeInfo.getName().equals(ID)) { | |||
return tagAttributeInfo; | |||
} | |||
} | |||
return null; // no such attribute | |||
@@ -62,8 +62,8 @@ public class TagData implements Cloneable { | |||
} | |||
if (atts != null) { | |||
for (int i = 0; i < atts.length; i++) { | |||
attributes.put((String) atts[i][0], atts[i][1]); | |||
for (Object[] att : atts) { | |||
attributes.put((String) att[0], att[1]); | |||
} | |||
} | |||
} | |||
@@ -141,9 +141,9 @@ public abstract class TagLibraryInfo { | |||
return null; | |||
} | |||
for (int i = 0; i < tags.length; i++) { | |||
if (shortname.equals(tags[i].getTagName())) { | |||
return tags[i]; | |||
for (TagInfo tag : tags) { | |||
if (shortname.equals(tag.getTagName())) { | |||
return tag; | |||
} | |||
} | |||
return null; | |||
@@ -166,9 +166,9 @@ public abstract class TagLibraryInfo { | |||
return null; | |||
} | |||
for (int i = 0; i < tagFiles.length; i++) { | |||
if (tagFiles[i].getName().equals(shortname)) { | |||
return tagFiles[i]; | |||
for (TagFileInfo tagFile : tagFiles) { | |||
if (tagFile.getName().equals(shortname)) { | |||
return tagFile; | |||
} | |||
} | |||
return null; | |||
@@ -201,9 +201,9 @@ public abstract class TagLibraryInfo { | |||
return null; | |||
} | |||
for (int i = 0; i < functions.length; i++) { | |||
if (functions[i].getName().equals(name)) { | |||
return functions[i]; | |||
for (FunctionInfo function : functions) { | |||
if (function.getName().equals(name)) { | |||
return function; | |||
} | |||
} | |||
return null; | |||
@@ -96,7 +96,11 @@ public interface Loader { | |||
/** | |||
* @return the reloadable flag for this Loader. | |||
* | |||
* @deprecated Use {@link Context#getReloadable()}. This method will be | |||
* removed in Tomcat 10. | |||
*/ | |||
@Deprecated | |||
public boolean getReloadable(); | |||
@@ -104,7 +108,11 @@ public interface Loader { | |||
* Set the reloadable flag for this Loader. | |||
* | |||
* @param reloadable The new reloadable flag | |||
* | |||
* @deprecated Use {@link Context#setReloadable(boolean)}. This method will | |||
* be removed in Tomcat 10. | |||
*/ | |||
@Deprecated | |||
public void setReloadable(boolean reloadable); | |||
@@ -319,7 +319,9 @@ public abstract class AbstractCatalinaTask extends BaseRedirectorHelperTask { | |||
hconn.connect(); | |||
// Swallow response message | |||
IOTools.flow(hconn.getInputStream(), null); | |||
try (InputStream is = hconn.getInputStream()) { | |||
IOTools.flow(is, null); | |||
} | |||
} | |||
@@ -23,6 +23,7 @@ import java.io.UnsupportedEncodingException; | |||
import java.net.URL; | |||
import java.net.URLConnection; | |||
import java.net.URLEncoder; | |||
import java.nio.channels.FileChannel; | |||
import java.util.regex.Pattern; | |||
import org.apache.tools.ant.BuildException; | |||
@@ -139,19 +140,11 @@ public class DeployTask extends AbstractCatalinaCommandTask { | |||
throw new BuildException(e); | |||
} | |||
} else { | |||
FileInputStream fsInput = null; | |||
try { | |||
fsInput = new FileInputStream(war); | |||
contentLength = fsInput.getChannel().size(); | |||
try (FileInputStream fsInput = new FileInputStream(war); | |||
FileChannel fsChannel = fsInput.getChannel()) { | |||
contentLength = fsChannel.size(); | |||
stream = new BufferedInputStream(fsInput, 1024); | |||
} catch (IOException e) { | |||
if (fsInput != null) { | |||
try { | |||
fsInput.close(); | |||
} catch (IOException ioe) { | |||
// Ignore | |||
} | |||
} | |||
throw new BuildException(e); | |||
} | |||
} | |||
@@ -141,10 +141,10 @@ public class JMXAccessorQueryTask extends JMXAccessorTask { | |||
MBeanAttributeInfo attrs[] = minfo.getAttributes(); | |||
Object value = null; | |||
for (int i = 0; i < attrs.length; i++) { | |||
if (!attrs[i].isReadable()) | |||
for (MBeanAttributeInfo attr : attrs) { | |||
if (!attr.isReadable()) | |||
continue; | |||
String attName = attrs[i].getName(); | |||
String attName = attr.getName(); | |||
if (attName.indexOf('=') >= 0 || attName.indexOf(':') >= 0 | |||
|| attName.indexOf(' ') >= 0) { | |||
continue; | |||
@@ -1326,9 +1326,9 @@ public abstract class AuthenticatorBase extends ValveBase | |||
Container parent = context.getParent(); | |||
while ((sso == null) && (parent != null)) { | |||
Valve valves[] = parent.getPipeline().getValves(); | |||
for (int i = 0; i < valves.length; i++) { | |||
if (valves[i] instanceof SingleSignOn) { | |||
sso = (SingleSignOn) valves[i]; | |||
for (Valve valve : valves) { | |||
if (valve instanceof SingleSignOn) { | |||
sso = (SingleSignOn) valve; | |||
break; | |||
} | |||
} | |||
@@ -227,8 +227,7 @@ public class BasicAuthenticator extends AuthenticatorBase { | |||
// step past the auth method name | |||
base64blobOffset = initialOffset + METHOD.length(); | |||
base64blobLength = authorization.getLength() - METHOD.length(); | |||
} | |||
else { | |||
} else { | |||
// is this possible, or permitted? | |||
throw new IllegalArgumentException( | |||
"Authorization header method is not \"Basic\""); | |||
@@ -271,8 +270,7 @@ public class BasicAuthenticator extends AuthenticatorBase { | |||
if (colon < 0) { | |||
username = new String(decoded, charset); | |||
// password will remain null! | |||
} | |||
else { | |||
} else { | |||
username = new String(decoded, 0, colon, charset); | |||
password = new String(decoded, colon + 1, decoded.length - colon - 1, charset); | |||
// tolerate surplus white space around credentials | |||
@@ -650,8 +650,8 @@ public class FormAuthenticator | |||
SavedRequest saved = new SavedRequest(); | |||
Cookie cookies[] = request.getCookies(); | |||
if (cookies != null) { | |||
for (int i = 0; i < cookies.length; i++) { | |||
saved.addCookie(cookies[i]); | |||
for (Cookie cookie : cookies) { | |||
saved.addCookie(cookie); | |||
} | |||
} | |||
Enumeration<String> names = request.getHeaderNames(); | |||
@@ -36,7 +36,7 @@ basicAuthenticator.invalidCharset=ๆๅฎใงใใๅคใฏใnullใ็ฉบใฎๆๅญๅ | |||
digestAuthenticator.cacheRemove=ๆๅนใชใจใณใใชใใฏใฉใคใขใณใใฎnonceใญใฃใใทใฅใใๅ้คใใใๆฐใใใจใณใใชใฎใใใฎในใใผในใ็ขบไฟใใใพใใใ ใชใใฌใคๆปๆใๅฏ่ฝใซใชใใพใใใ ใชใใฌใคๆปๆใฎๅฏ่ฝๆงใ้ฒใใซใฏใnonceValidityใๆธใใใใnonceCacheSizeใๅขใใใฆใใ ใใใ ใใฎใฟใคใใฎ่ญฆๅใฏ5ๅ้่กจ็คบใใใชใใชใใพใใ | |||
formAuthenticator.forwardErrorFail=ไบๆใใฌ็ฐๅธธใซใใใจใฉใผใใผใธใธ่ปข้ใใพใใ | |||
formAuthenticator.forwardErrorFail=ใจใฉใผใใผใธใธ่ปข้ไธญใฎไบๆใใฌใจใฉใผ | |||
formAuthenticator.forwardLogin=ใชใฏใจในใใกใฝใใGETใไฝฟ็จใใฆใณใณใใญในใ[{3}]ใฎใใผใธ[{2}]ใซใกใฝใใ[{1}]ใง่กใใใ[{0}]ใฎ่ฆๆฑใใใฉใฏใผใใใพใใ | |||
formAuthenticator.forwardLoginFail=ใญใฐใคใณใใผใธใธใฎ่ปข้ใงใฎไบๆใใชใใจใฉใผ | |||
formAuthenticator.noErrorPage=ใณใณใใญในใ[{0}]ใฎFORM่ช่จผใซใจใฉใผใใผใธใๅฎ็พฉใใใฆใใพใใ | |||
@@ -44,27 +44,27 @@ formAuthenticator.noLoginPage=ใณใณใใญในใ[{0}]ใฎFORM่ช่จผใซใญใฐใค | |||
singleSignOn.debug.associate=SSOใฏใขใใชใฑใผใทใงใณใปใใทใงใณ[{1}]ใSSOใปใใทใงใณ[{0}]ใซ้ข้ฃไปใใพใ | |||
singleSignOn.debug.associateFail=SSOใปใใทใงใณ[{1}]ใๅญๅจใใชใใใใSSOใฏใขใใชใฑใผใทใงใณใปใใทใงใณ[{0}]ใ้ข้ฃไปใใใใพใใใงใใใ | |||
singleSignOn.debug.cookieCheck=SSOใSSOใฏใใญใผใใใงใใฏใใพใ | |||
singleSignOn.debug.cookieCheck=SSOใฏSSOใฏใใญใผใใใงใใฏใใฆใใพใ | |||
singleSignOn.debug.cookieNotFound=SSOใฏSSO Cookieใๆคๅบใใพใใใงใใใ | |||
singleSignOn.debug.deregister=SSOใปใใทใงใณ[{1}]ใซ้ข้ฃไปใใใใใขใใชใฑใผใทใงใณใปใใทใงใณ[{0}]ใๆ้ๅใใซใใพใใ | |||
singleSignOn.debug.deregister=SSOใปใใทใงใณ[{1}]ใซ้ข้ฃไปใใใใใขใใชใฑใผใทใงใณใปใใทใงใณ[{0}]ใ็ ดๆฃใใพใใ | |||
singleSignOn.debug.deregisterFail=ใญใฃใใทใฅใซใชใใใใSSOใปใใทใงใณ[{0}]ใฎ็ป้ฒใ่งฃ้คใงใใพใใใงใใใ | |||
singleSignOn.debug.deregisterNone=SSOใปใใทใงใณ[{0}]ใฎ็ป้ฒใ่งฃ้คใใพใใใใ้ข้ฃใใใขใใชใฑใผใทใงใณใปใใทใงใณใ่ฆใคใใใพใใใงใใใ | |||
singleSignOn.debug.deregisterNone=SSOใปใใทใงใณ[{0}]ใฎ็ป้ฒใ่งฃ้คใใพใใใใ้ข้ฃไปใใใใใขใใชใฑใผใทใงใณใปใใทใงใณใฏ่ฆใคใใใพใใใงใใใ | |||
singleSignOn.debug.hasPrincipal=SSOใไปฅๅใซ่ช่จผใใใใใชใณใทใใซ[{0}]ใๆคๅบใใพใใ | |||
singleSignOn.debug.invoke=[{0}]ใซๅฏพใใSSOๅฆ็ใชใฏใจในใ | |||
singleSignOn.debug.principalCheck=SSOใปใใทใงใณใฎใญใฃใใทใฅใใใใใชใณใทใใซใๆขใSSO [{0}] | |||
singleSignOn.debug.invoke=SSO ใฏ [{0}] ใซๅฏพใใใชใฏใจในใใๅฆ็ใใฆใใพใ | |||
singleSignOn.debug.principalCheck=SSO ใฏ SSO ใปใใทใงใณ [{0}] ใฎใญใฃใใทใฅใใใใใชใณใทใใซใๆข็ดขใใฆใใพใ | |||
singleSignOn.debug.principalFound=SSO ใฎใญใฃใใทใฅใใใใใชใณใทใใซ [{0}] ใๅๅพใใพใใใ่ช่จผใฟใคใใฏ [{1}] ใงใใ | |||
singleSignOn.debug.principalNotFound=SSOใฏใญใฃใใทใฅใใใใใชใณใทใใซใๆคๅบใใพใใใงใใใ ใปใใทใงใณ[{0}]ใฎSSO Cookieใๆถๅปใใฆใใพใใ | |||
singleSignOn.debug.register=่ช่จผใฟใคใ[{2}]ใฎใฆใผใถใผ[{1}]ใฎSSOใปใใทใงใณ[{0}]ใ็ป้ฒใใฆใใSSO | |||
singleSignOn.debug.removeSession=SSOใปใใทใงใณ[{1}]ใใใฎใขใใชใฑใผใทใงใณใปใใทใงใณ[{0}]ใฎๅ้ค | |||
singleSignOn.debug.sessionLogout=SSOใปใใทใงใณ[{0}]ใจใขใใชใฑใผใทใงใณใปใใทใงใณ[{1}]ใฎใญใฐใขใฆใใๅฆ็ใใSSOใ | |||
singleSignOn.debug.sessionTimeout=SSOใฏSSOใปใใทใงใณ[{0}]ใจใขใใชใฑใผใทใงใณใปใใทใงใณ[{1}]ใฎใฟใคใ ใขใฆใๅฆ็ไธญ | |||
singleSignOn.debug.register=SSOใฏ่ช่จผใฟใคใ[{2}]ใฎใฆใผใถใผ[{1}]ใฎSSOใปใใทใงใณ[{0}]ใ็ป้ฒใใฆใใพใ | |||
singleSignOn.debug.removeSession=SSOใฏSSOใปใใทใงใณ[{1}]ใใใขใใชใฑใผใทใงใณใปใใทใงใณ[{0}]ใๅ้คใใฆใใพใ | |||
singleSignOn.debug.sessionLogout=SSOใฏSSOใปใใทใงใณ[{0}]ใจใขใใชใฑใผใทใงใณใปใใทใงใณ[{1}]ใใญใฐใขใฆใๅฆ็ใใฆใใพใ | |||
singleSignOn.debug.sessionTimeout=SSOใฏSSOใปใใทใงใณ[{0}]ใจใขใใชใฑใผใทใงใณใปใใทใงใณ[{1}]ใฎใฟใคใ ใขใฆใใๅฆ็ใใฆใใพใ | |||
singleSignOn.debug.update=SSOใฏSSOใปใใทใงใณ[{0}]ใ่ช่จผใฟใคใ[{1}]ใซๆดๆฐใใพใใ | |||
singleSignOn.sessionExpire.contextNotFound=Contextใ่ฆใคใใใชใใใใSSOใฏใปใใทใงใณ[{0}]ใๆ้ๅใใซใงใใพใใ | |||
singleSignOn.sessionExpire.engineNull=Engine ใNullใ ใฃใใใใSSOใฏใปใใทใงใณ[{0}]ใๆ้ๅใใซใงใใพใใใ | |||
singleSignOn.sessionExpire.hostNotFound=ใในใใ่ฆใคใใใชใใใ SSO ใปใใทใงใณ [{0}] ใๅคฑๅนใงใใพใใใ | |||
singleSignOn.sessionExpire.managerError=ใปใใทใงใณใๆค็ดขใใใจใใซManagerใไพๅคใในใญใผใใใใใSSOใฏใปใใทใงใณ[{0}]ใๆ้ๅใใซใงใใพใใ | |||
singleSignOn.sessionExpire.managerNotFound=Managerใ่ฆใคใใใชใใฃใใฎใงใSSOใฏใปใใทใงใณ[{0}]ใๆ้ๅใใซใงใใพใใใ | |||
singleSignOn.sessionExpire.sessionNotFound=ใปใใทใงใณใ่ฆใคใใใพใใใงใใใฎใงใSSOใฏใปใใทใงใณ[{0}]ใๆ้ๅใใซใงใใพใใใ | |||
singleSignOn.sessionExpire.contextNotFound=Contextใ่ฆใคใใใชใใใใSSOใฏใปใใทใงใณ[{0}]ใ็ ดๆฃใงใใพใใ | |||
singleSignOn.sessionExpire.engineNull=Engine ใNullใ ใฃใใใใSSOใฏใปใใทใงใณ[{0}]ใ็ ดๆฃใงใใพใใใ | |||
singleSignOn.sessionExpire.hostNotFound=ใในใใ่ฆใคใใใชใใใ SSO ใปใใทใงใณ [{0}] ใ็ ดๆฃใงใใพใใใ | |||
singleSignOn.sessionExpire.managerError=ใปใใทใงใณใๆค็ดขใใใจใใซManagerใไพๅคใในใญใผใใใใใSSOใฏใปใใทใงใณ[{0}]ใ็ ดๆฃใงใใพใใ | |||
singleSignOn.sessionExpire.managerNotFound=Managerใ่ฆใคใใใชใใฃใใฎใงใSSOใฏใปใใทใงใณ[{0}]ใ็ ดๆฃใงใใพใใใ | |||
singleSignOn.sessionExpire.sessionNotFound=ใปใใทใงใณใ่ฆใคใใใชใใใใSSOใฏใปใใทใงใณ[{0}]ใ็ ดๆฃใงใใพใใใ | |||
spnegoAuthenticator.authHeaderNoToken=ใฏใฉใคใขใณใใใๅไฟกใใ Negoiate ่ช่จผใใใใซใฏใใผใฏใณใใใใพใใใ | |||
spnegoAuthenticator.authHeaderNotNego=ใฏใฉใคใขใณใใใๅไฟกใใ่ช่จผใใใใผใฏ Negotiate ใใๅงใพใฃใฆใใพใใใ | |||
@@ -15,6 +15,8 @@ | |||
authenticator.certificates=ๆญค่ฏทๆฑไธญๆฒกๆๅฎขๆท็ซฏ่ฏไนฆ้พ | |||
authenticator.changeSessionId=ๅจ่บซไปฝ้ช่ฏๆถ, ไผ่ฏ ID ไป [{0} ๆดๆนไธบ [{1}] | |||
authenticator.check.authorize=็จๆทๅ[{0}]ไป่ฟๆฅๅจ่ทๅพ๏ผๅนถ่ขซไฟกไปปไธบๆๆใไปTomcat้ขๅ่ทๅๆญค็จๆท็่ง่ฒใ | |||
authenticator.check.authorizeFail=้ขๅๆ ๆณ่ฏๅซ็จๆท[{0}]ใๅๅปบๅ ทๆ่ฏฅๅ็งฐไธๆฒกๆ่ง่ฒ็ไธปไฝใ | |||
authenticator.check.found=ๅทฒ้่ฟ่บซไปฝ้ช่ฏ [{0}] | |||
authenticator.check.sso=ๆช็ป่ฟ่บซไปฝ้ช่ฏไฝๆพๅฐไบSSOไผ่ฏID [{0}]ใๅฐ่ฏ้ๆฐ้ช่ฏใ | |||
authenticator.formlogin=ๅฏน่กจๅ็ปๅฝ้กต็็ดๆฅๅผ็จๆ ๆ | |||
@@ -34,23 +36,37 @@ basicAuthenticator.invalidCharset=ๅชๅ ่ฎธๅผไธบnullใ็ฉบๅญ็ฌฆไธฒๆUTF-8 | |||
digestAuthenticator.cacheRemove=ๅทฒไปๅฎขๆท็ซฏ nonce ็ผๅญไธญๅ ้คๆๆๆก็ฎ๏ผไปฅไพฟไธบๆฐๆก็ฎ่ พๅบ็ฉบ้ดใ้ๆญๆปๅป็ฐๅจๆฏๅฏ่ฝ็ใไธบ้ฒๆญข้ๆญๆปๅป็ๅฏ่ฝๆง๏ผ่ฏท้ไฝnonceValidityๆๅขๅ nonceCacheSizeใๆญค็ฑปๅ็่ฟไธๆญฅ่ญฆๅๅฐ่ขซๆๅถ5ๅ้ใ | |||
formAuthenticator.forwardErrorFail=่ฝฌๅๅฐ้่ฏฏ้กตๆถๅบ็ฐๆๅค้่ฏฏใ | |||
formAuthenticator.forwardLogin=ไฝฟ็จ่ฏทๆฑๆนๆณGETๅฐไฝฟ็จๆนๆณ[{1}]ๅๅบ็ๅฏน[{0}]็่ฏทๆฑ่ฝฌๅๅฐไธไธๆ[{3}]็็ปๅฝ้กต[{2}] | |||
formAuthenticator.forwardLoginFail=่ฝฌๅๅฐ็ปๅฝ้กตๆถๅบ็ฐๆๅค้่ฏฏใ | |||
formAuthenticator.noErrorPage=ๆฒกๆไธบไธไธๆ[{0}]ไธญ็่กจๅ่บซไปฝ้ช่ฏๅฎไน้่ฏฏ้กต | |||
formAuthenticator.noLoginPage=ๅจ็ฏๅข[{0}]ไธญ๏ผๆชไธบFORM่ฎค่ฏๅฎไน็ปๅฝ้กต้ข | |||
singleSignOn.debug.associate=SSOๅฐๅบ็จ็จๅบไผ่ฏ[{1}]ไธSSOไผ่ฏ[{0}]ๅ ณ่ | |||
singleSignOn.debug.associateFail=SSOๆ ๆณๅ ณ่ๅบ็จ็จๅบไผ่ฏ{0}๏ผๅ ไธบSSOไผ่ฏ{1}ไธๅญๅจใ | |||
singleSignOn.debug.cookieCheck=SSOๆฃๆฅSSO cookie | |||
singleSignOn.debug.cookieNotFound=SSOๆฒกๆๆพๅฐSSO cookie | |||
singleSignOn.debug.deregister=ไธSSOไผ่ฏ[{1}]ๅ ณ่็SSO่ฟๆๅบ็จ็จๅบไผ่ฏ[{0}] | |||
singleSignOn.debug.deregisterFail=SSOๆค้็ป่ฎฐSSOไผ่ฏ[{0}]ๅคฑ่ดฅ๏ผๅ ไธบ็ผๅญไธญไธๅ ๅซ่ฟไธชSSOไผ่ฏ | |||
singleSignOn.debug.deregisterNone=SSOๆณจ้ไบSSOไผ่ฏ[{0}]๏ผไฝๆชๆพๅฐๅ ณ่็ๅบ็จ็จๅบไผ่ฏ | |||
singleSignOn.debug.hasPrincipal=ๆพๅฐไปฅๅ็ป่ฟ่บซไปฝ้ช่ฏ็ไธปไฝ[{0}] | |||
singleSignOn.debug.invoke=SSOไธบ[{0}]ๅค็่ฏทๆฑ | |||
singleSignOn.debug.principalCheck=SSOไธบSSOไผ่ฏ[{0}]ๅฏปๆพ็ผๅญ็Principal | |||
singleSignOn.debug.principalFound=SSO ๆพๅฐไบๅธฆ็่ฎค่ฏ็ฑปๅ็็ผๅญไปฃ็ | |||
singleSignOn.debug.principalNotFound=SSOๆชๆพๅฐ็ผๅญ็Principal๏ผไธบไผ่ฏ[{0}]ๆฆ้คSSO cookie | |||
singleSignOn.debug.register=ไฝฟ็จ่บซไปฝ้ช่ฏ็ฑปๅ[{2}]็็จๆท[{1}]็SSOๆณจๅSSOไผ่ฏ[{0}]ใ | |||
singleSignOn.debug.removeSession=SSO ไป SSO session [{1}] ไธญๅ ้คๅบ็จ็จๅบไผ่ฏ [{0}] | |||
singleSignOn.debug.sessionLogout=SSOๆญฃๅจๅค็SSOไผ่ฏ[{0}]ๅๅบ็จ็จๅบไผ่ฏ[{1}]็ๆณจ้ | |||
singleSignOn.debug.sessionTimeout=SSOๆญฃๅจๅค็SSOไผ่ฏ[{0}]ๅๅบ็จ็จๅบไผ่ฏ[{1}]็่ถ ๆถ | |||
singleSignOn.debug.update=SSO ๆดๆฐSSO ไผ่ฏ[{0}] ๅฏน่ฎค่ฏ ็ฑปๅ[{1}] | |||
singleSignOn.sessionExpire.contextNotFound=SSOๆ ๆณไธญๆญข[{0}]๏ผๅ ไธบContextๆชๆพๅฐ | |||
singleSignOn.sessionExpire.engineNull=SSOๆ ๆณไฝฟไผ่ฏ[{0}]่ฟๆ๏ผๅ ไธบๅผๆไธบ็ฉบใ | |||
singleSignOn.sessionExpire.hostNotFound=ๅ ไธบ Host ไธขๅคฑ๏ผSSO ๆ ๆณไฝฟ session [{0}] ๅคฑๆ | |||
singleSignOn.sessionExpire.managerError=็ฑไบไผ่ฏ็ฎก็ๅจๅจๆฃ็ดขไผ่ฏๆถๆๅบๅผๅธธ๏ผๅฏผ่ดๅ็น็ปๅฝๆ ๆณไฝฟไผ่ฏ[{0}]ๅคฑๆ | |||
singleSignOn.sessionExpire.managerNotFound=SSOๆ ๆณไฝฟไผ่ฏ[{0}]่ฟๆ๏ผๅ ไธบๆพไธๅฐ็ฎก็ๅจ | |||
singleSignOn.sessionExpire.sessionNotFound=SSOๆ ๆณไฝฟไผ่ฏ[{0}]่ฟๆ๏ผๅ ไธบๆพไธๅฐ่ฏฅไผ่ฏ | |||
spnegoAuthenticator.authHeaderNoToken=ๅฎขๆท็ซฏๅ้็ๅๅๆๆ header ๆชๅ ๅซ token | |||
spnegoAuthenticator.authHeaderNotNego=ๅฎขๆท็ซฏๅ้็ๆๆๅคดไธๆฏไปฅๅๅๅผๅง็ใ | |||
spnegoAuthenticator.serviceLoginFail=ๆ ๆณไฝไธบๆๅกไธปไฝ็ปๅฝ | |||
spnegoAuthenticator.ticketValidateFail=ๆ ๆณ้ช่ฏๅฎขๆท็ซฏๆไพ็็ฅจ่ฏ |
@@ -226,9 +226,9 @@ public class SingleSignOn extends ValveBase { | |||
Cookie cookie = null; | |||
Cookie cookies[] = request.getCookies(); | |||
if (cookies != null) { | |||
for (int i = 0; i < cookies.length; i++) { | |||
if (Constants.SINGLE_SIGN_ON_COOKIE.equals(cookies[i].getName())) { | |||
cookie = cookies[i]; | |||
for (Cookie value : cookies) { | |||
if (Constants.SINGLE_SIGN_ON_COOKIE.equals(value.getName())) { | |||
cookie = value; | |||
break; | |||
} | |||
} | |||
@@ -13,11 +13,11 @@ | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
authConfigFactoryImpl.load=[{0}]ใใๆฐธ็ถ็ใชใใญใใคใ็ป้ฒใ่ชญใฟ่พผใฟใพใใ | |||
authConfigFactoryImpl.load=[{0}]ใใๆฐธ็ถๅใใญใใคใใฎ็ป้ฒใ่ชญใฟ่พผใฟใพใใ | |||
authConfigFactoryImpl.registerClass=ใขใใชใฑใผใทใงใณใณใณใใญในใ [{2}] ใฎใฌใคใคใผ [{1}] ใซใฏใฉใน [{0}] ใ็ป้ฒใใพใใ | |||
authConfigFactoryImpl.registerInstance=ใฌใคใค[{1}]ใจใขใใชใฑใผใทใงใณใณใณใใญในใ[{2}]ใฎใฟใคใ[{0}]ใฎใคใณในใฟใณในใฎ็ป้ฒ | |||
authConfigFactoryImpl.registerInstance=่ช่จผๆงๆใใญใใคใ [{0}] ใฎใคใณในใฟใณในใใใฌใคใค [{1}] ใจใขใใชใฑใผใทใงใณใณใณใใญในใ [{2}] ใซ็ป้ฒใใฆใใพใ | |||
authConfigFactoryImpl.zeroLengthAppContext=ๆๅญๅ้ทใ 0 ใฎใขใใชใฑใผใทใงใณใณใณใใญในใๅใฏไธๆญฃใงใใ | |||
authConfigFactoryImpl.zeroLengthMessageLayer=้ทใใผใญใฎใกใใปใผใธๅฑคๅใฏ็กๅนใงใ | |||
authConfigFactoryImpl.zeroLengthMessageLayer=้ทใใผใญใฎใกใใปใผใธใฌใคใคๅใฏ็กๅนใงใ | |||
callbackHandlerImpl.jaspicCallbackMissing=ๅไฟกใใใฟใคใ[{0}]ใฎใตใใผใใใใฆใใชใJASPICใณใผใซใใใฏใ็ก่ฆใใใพใใใ | |||
@@ -14,9 +14,13 @@ | |||
# limitations under the License. | |||
authConfigFactoryImpl.load=ไป[{0}]ๅ ่ฝฝๆไน ๅๆไพ่ ๆณจๅไฟกๆฏ | |||
authConfigFactoryImpl.registerClass=ๆญฃๅจไธบๅฑ[{1}]ๅๅบ็จ็จๅบไธไธๆ[{2}]ๆณจๅ็ฑป[{0}] | |||
authConfigFactoryImpl.registerInstance=ๆญฃๅจไธบๅฑ[{1}]ๅๅบ็จ็จๅบไธไธๆ[{2}]ๆณจๅ็ฑปๅไธบ[{0}]็ๅฎไพ | |||
authConfigFactoryImpl.zeroLengthAppContext=:)ๅบ็จไธไธๆๅ็งฐ็้ฟๅบฆไธบ0ๆฏๆ ๆ็ | |||
authConfigFactoryImpl.zeroLengthMessageLayer=้ถ้ฟๅบฆ็ๆถๆฏๅฑๅ็งฐๆฏๆ ๆ็ | |||
callbackHandlerImpl.jaspicCallbackMissing=ๆฅๆถๅฐไธๆฏๆ็็ฑปๅไธบ{0}็JASPICๅ่ฐ๏ผ่ฏฅๅ่ฐ่ขซๅฟฝ็ฅ | |||
jaspicAuthenticator.authenticate=้่ฟJASPIC้ช่ฏ[{0}]็่ฏทๆฑ | |||
persistentProviderRegistrations.deleteFail=ๆ ๆณๅ ้คไธดๆถๆไปถ[{0}] | |||
@@ -15,6 +15,9 @@ | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
--> | |||
<!DOCTYPE mbeans-descriptors PUBLIC | |||
"-//Apache Software Foundation//DTD Model MBeans Configuration File" | |||
"http://jakarta.apache.org/commons/dtds/mbeans-descriptors.dtd"> | |||
<mbeans-descriptors> | |||
<mbean name="BasicAuthenticator" | |||
@@ -35,7 +35,6 @@ import org.apache.coyote.AbstractProtocol; | |||
import org.apache.coyote.Adapter; | |||
import org.apache.coyote.ProtocolHandler; | |||
import org.apache.coyote.UpgradeProtocol; | |||
import org.apache.coyote.ajp.AbstractAjpProtocol; | |||
import org.apache.coyote.http11.AbstractHttp11JsseProtocol; | |||
import org.apache.juli.logging.Log; | |||
import org.apache.juli.logging.LogFactory; | |||
@@ -43,6 +42,7 @@ import org.apache.tomcat.util.IntrospectionUtils; | |||
import org.apache.tomcat.util.buf.B2CConverter; | |||
import org.apache.tomcat.util.buf.CharsetUtil; | |||
import org.apache.tomcat.util.buf.EncodedSolidusHandling; | |||
import org.apache.tomcat.util.buf.UDecoder; | |||
import org.apache.tomcat.util.net.SSLHostConfig; | |||
import org.apache.tomcat.util.net.openssl.OpenSSLImplementation; | |||
import org.apache.tomcat.util.res.StringManager; | |||
@@ -75,49 +75,37 @@ public class Connector extends LifecycleMBeanBase { | |||
* Defaults to using HTTP/1.1 NIO implementation. | |||
*/ | |||
public Connector() { | |||
this("org.apache.coyote.http11.Http11NioProtocol"); | |||
this("HTTP/1.1"); | |||
} | |||
public Connector(String protocol) { | |||
boolean aprConnector = AprLifecycleListener.isAprAvailable() && | |||
boolean apr = AprLifecycleListener.isAprAvailable() && | |||
AprLifecycleListener.getUseAprConnector(); | |||
if ("HTTP/1.1".equals(protocol) || protocol == null) { | |||
if (aprConnector) { | |||
protocolHandlerClassName = "org.apache.coyote.http11.Http11AprProtocol"; | |||
} else { | |||
protocolHandlerClassName = "org.apache.coyote.http11.Http11NioProtocol"; | |||
} | |||
} else if ("AJP/1.3".equals(protocol)) { | |||
if (aprConnector) { | |||
protocolHandlerClassName = "org.apache.coyote.ajp.AjpAprProtocol"; | |||
} else { | |||
protocolHandlerClassName = "org.apache.coyote.ajp.AjpNioProtocol"; | |||
} | |||
} else { | |||
protocolHandlerClassName = protocol; | |||
} | |||
// Instantiate protocol handler | |||
ProtocolHandler p = null; | |||
try { | |||
Class<?> clazz = Class.forName(protocolHandlerClassName); | |||
p = (ProtocolHandler) clazz.getConstructor().newInstance(); | |||
p = ProtocolHandler.create(protocol, apr); | |||
} catch (Exception e) { | |||
log.error(sm.getString( | |||
"coyoteConnector.protocolHandlerInstantiationFailed"), e); | |||
} finally { | |||
this.protocolHandler = p; | |||
} | |||
if (p != null) { | |||
protocolHandler = p; | |||
protocolHandlerClassName = protocolHandler.getClass().getName(); | |||
} else { | |||
protocolHandler = null; | |||
protocolHandlerClassName = protocol; | |||
} | |||
// Default for Connector depends on this system property | |||
setThrowOnFailure(Boolean.getBoolean("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE")); | |||
} | |||
// Default for Connector depends on this (deprecated) system property | |||
if (Boolean.parseBoolean(System.getProperty("org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH", "false"))) { | |||
encodedSolidusHandling = EncodedSolidusHandling.DECODE; | |||
} | |||
public Connector(ProtocolHandler protocolHandler) { | |||
protocolHandlerClassName = protocolHandler.getClass().getName(); | |||
this.protocolHandler = protocolHandler; | |||
// Default for Connector depends on this system property | |||
setThrowOnFailure(Boolean.getBoolean("org.apache.catalina.startup.EXIT_ON_INIT_FAILURE")); | |||
} | |||
@@ -148,7 +136,7 @@ public class Connector extends LifecycleMBeanBase { | |||
protected boolean enableLookups = false; | |||
/* | |||
/** | |||
* Is generation of X-Powered-By response header enabled/disabled? | |||
*/ | |||
protected boolean xpoweredBy = false; | |||
@@ -271,10 +259,18 @@ public class Connector extends LifecycleMBeanBase { | |||
protected Adapter adapter = null; | |||
/** | |||
* The URI encoding in use. | |||
*/ | |||
private Charset uriCharset = StandardCharsets.UTF_8; | |||
private EncodedSolidusHandling encodedSolidusHandling = EncodedSolidusHandling.REJECT; | |||
/** | |||
* The behavior when an encoded solidus (slash) is submitted. | |||
*/ | |||
@SuppressWarnings("deprecation") | |||
private EncodedSolidusHandling encodedSolidusHandling = | |||
UDecoder.ALLOW_ENCODED_SLASH ? EncodedSolidusHandling.DECODE : EncodedSolidusHandling.REJECT; | |||
/** | |||
@@ -319,7 +315,11 @@ public class Connector extends LifecycleMBeanBase { | |||
* | |||
* @param name the property name | |||
* @return the property value | |||
* | |||
* @deprecated Use {@link #getProperty(String)}. This will be removed in | |||
* Tomcat 10 onwards. | |||
*/ | |||
@Deprecated | |||
public Object getAttribute(String name) { | |||
return getProperty(name); | |||
} | |||
@@ -330,7 +330,11 @@ public class Connector extends LifecycleMBeanBase { | |||
* | |||
* @param name the property name | |||
* @param value the property value | |||
* | |||
* @deprecated Use {@link #setProperty(String, String)}. This will be | |||
* removed in Tomcat 10 onwards. | |||
*/ | |||
@Deprecated | |||
public void setAttribute(String name, Object value) { | |||
setProperty(name, String.valueOf(value)); | |||
} | |||
@@ -621,18 +625,15 @@ public class Connector extends LifecycleMBeanBase { | |||
* @return the Coyote protocol handler in use. | |||
*/ | |||
public String getProtocol() { | |||
if (("org.apache.coyote.http11.Http11NioProtocol".equals(getProtocolHandlerClassName()) && | |||
(!AprLifecycleListener.isAprAvailable() || !AprLifecycleListener.getUseAprConnector())) || | |||
"org.apache.coyote.http11.Http11AprProtocol".equals(getProtocolHandlerClassName()) && | |||
AprLifecycleListener.getUseAprConnector()) { | |||
boolean apr = AprLifecycleListener.getUseAprConnector(); | |||
if ((!apr && org.apache.coyote.http11.Http11NioProtocol.class.getName().equals(protocolHandlerClassName)) | |||
|| (apr && org.apache.coyote.http11.Http11AprProtocol.class.getName().equals(protocolHandlerClassName))) { | |||
return "HTTP/1.1"; | |||
} else if (("org.apache.coyote.ajp.AjpNioProtocol".equals(getProtocolHandlerClassName()) && | |||
(!AprLifecycleListener.isAprAvailable() || !AprLifecycleListener.getUseAprConnector())) || | |||
"org.apache.coyote.ajp.AjpAprProtocol".equals(getProtocolHandlerClassName()) && | |||
AprLifecycleListener.getUseAprConnector()) { | |||
} else if ((!apr && org.apache.coyote.ajp.AjpNioProtocol.class.getName().equals(protocolHandlerClassName)) | |||
|| (apr && org.apache.coyote.ajp.AjpAprProtocol.class.getName().equals(protocolHandlerClassName))) { | |||
return "AJP/1.3"; | |||
} | |||
return getProtocolHandlerClassName(); | |||
return protocolHandlerClassName; | |||
} | |||
@@ -928,9 +929,9 @@ public class Connector extends LifecycleMBeanBase { | |||
* @return a new Servlet response object | |||
*/ | |||
public Response createResponse() { | |||
if (protocolHandler instanceof AbstractAjpProtocol<?>) { | |||
int packetSize = ((AbstractAjpProtocol<?>) protocolHandler).getPacketSize(); | |||
return new Response(packetSize - org.apache.coyote.ajp.Constants.SEND_HEAD_LEN); | |||
int size = protocolHandler.getDesiredBufferSize(); | |||
if (size > 0) { | |||
return new Response(size); | |||
} else { | |||
return new Response(); | |||
} | |||
@@ -702,7 +702,7 @@ public class CoyoteAdapter implements Adapter { | |||
if (request.getContext() == null) { | |||
// Don't overwrite an existing error | |||
if (!response.isError()) { | |||
response.sendError(404, "Not found"); | |||
response.sendError(404); | |||
} | |||
// Allow processing to continue. | |||
// If present, the error reporting valve will provide a response | |||
@@ -826,14 +826,14 @@ public class CoyoteAdapter implements Adapter { | |||
if (wrapper != null) { | |||
String[] methods = wrapper.getServletMethods(); | |||
if (methods != null) { | |||
for (int i=0; i < methods.length; i++) { | |||
if ("TRACE".equals(methods[i])) { | |||
for (String method : methods) { | |||
if ("TRACE".equals(method)) { | |||
continue; | |||
} | |||
if (header == null) { | |||
header = methods[i]; | |||
header = method; | |||
} else { | |||
header += ", " + methods[i]; | |||
header += ", " + method; | |||
} | |||
} | |||
} | |||
@@ -83,6 +83,7 @@ request.asyncNotSupported=A filter or servlet of the current chain does not supp | |||
request.fragmentInDispatchPath=The fragment in dispatch path [{0}] has been removed | |||
request.illegalWrap=The request wrapper must wrap the request obtained from getRequest() | |||
request.notAsync=It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false) | |||
request.session.failed=Failed to load session [{0}] due to [{1}] | |||
requestFacade.nullRequest=The request object has been recycled and is no longer associated with this facade | |||
@@ -24,6 +24,7 @@ coyoteAdapter.nullRequest=Un dispatch asynchrone peut seulement se produire sur | |||
coyoteConnector.invalidEncoding=L''encodage [{0}] n''est pas reconnu par la JRE. Le connecteur (Connector) continuera ร utiliser [{1}] | |||
coyoteConnector.invalidPort=Le connecteur ne peut pas dรฉmarrer, parce que la valeur spรฉcifiรฉe du port [{0}] n''est pas valide | |||
coyoteConnector.notAsciiSuperset=L''encodage [{0}] n''inclut pas l''ASCII comme requis par la RFC 7230, le connecteur va continuer ร utiliser [{1}] | |||
coyoteConnector.parseBodyMethodNoTrace=La mรฉthode "TRACE" NE PEUT PAS contenir une entitรฉ (voir RFC 2616 Section 9.6) | |||
coyoteConnector.protocolHandlerDestroyFailed=La destruction du gestionnaire de protocole a รฉchouรฉ | |||
coyoteConnector.protocolHandlerInitializationFailed=L'initialisation du gestionnaire de protocole a รฉchouรฉ | |||
@@ -82,6 +83,7 @@ request.asyncNotSupported=Un filtre ou un Servlet de la chaรฎne actuelle ne supp | |||
request.fragmentInDispatchPath=Le fragment dans le chemin de dispatch [{0}] a รฉtรฉ enlevรฉ | |||
request.illegalWrap=L'enrobeur de la rรฉponse doit enrober la requรชte obtenue ร partir de getRequest() | |||
request.notAsync=Il est interdit d'appeler cette mรฉthode si la requรชte actuelle n'est pas en mode asynchrone (isAsyncStarted() a renvoyรฉ false) | |||
request.session.failed=Erreur de chargement de la session [{0}] ร cause de [{1}] | |||
requestFacade.nullRequest=L'objet requรชte a รฉtรฉ recyclรฉ et n'est plus associรฉ ร cette faรงade | |||
@@ -49,7 +49,7 @@ coyoteRequest.getContextPath.ise=ๆจๆบ็ใชใณใณใใญในใใใน[{0}]ใจใฆ | |||
coyoteRequest.getInputStream.ise=getReader()ใฏใใฎใชใฏใจในใใซๅฏพใใฆๆขใซๅผใณๅบใใใฆใใพใ | |||
coyoteRequest.getReader.ise=getInputStream()ใฏใใฎใชใฏใจในใใซๅฏพใใฆๆขใซๅผใณๅบใใใฆใใพใ | |||
coyoteRequest.gssLifetimeFail=ใฆใผใถใผใใชใณใทใใซ [{0}] ใฎๆฎใใฎๅฏฟๅฝ(็งๅไฝ) ใๅๅพใงใใพใใใ | |||
coyoteRequest.maxPostSizeExceeded=ใใซใใใผใใชใฏใจในใใซใฏใ้ข้ฃใใใณใใฏใฟใง่จญๅฎใใใmaxPostSizeใฎๅถ้ใ่ถ ใใใใฉใกใผใฟใใผใฟ๏ผใขใใใญใผใใใใใใกใคใซใ้คใ๏ผใๅซใพใใฆใใพใใใ | |||
coyoteRequest.maxPostSizeExceeded=ใใซใใใผใใชใฏใจในใใซใฏใ้ข้ฃไปใใใใใณใใฏใฟใง่จญๅฎใใใmaxPostSizeใฎๅถ้ใ่ถ ใใใใฉใกใผใฟใใผใฟ๏ผใขใใใญใผใใใใใใกใคใซใ้คใ๏ผใๅซใพใใฆใใพใใใ | |||
coyoteRequest.noAsync=ๅฆ็ใใงใผใณๅ ใฎๆฌกใฎใฏใฉในใ้ๅๆใใตใใผใใใฆใใชใใใใ้ๅๆใ้ๅงใงใใพใใใ[{0}] | |||
coyoteRequest.noMultipartConfig=multi-part ๆงๆใๆไพใใใฆใใชใใใใpartใๅฆ็ใใใใจใใงใใพใใ | |||
coyoteRequest.parseParameters=POST ใใฉใกใผใฟใผใฎๅฆ็ไธญใซไพๅคใๆใใพใใใ | |||
@@ -79,10 +79,11 @@ inputBuffer.streamClosed=ในใใชใผใ ใฏใฏใญใผใบใใฆใใพใ | |||
outputBuffer.writeNull=write(String, int, int) ใกใฝใใใฎ String ๅใฎๅผๆฐใซ null ใๆๅฎใงใใพใใใ | |||
request.asyncNotSupported=็พๅจใฎใใงใผใณใฎใใฃใซใฟใพใใฏใตใผใใฌใใใฏ้ๅๆๆไฝใใตใใผใใใฆใใพใใใ | |||
request.fragmentInDispatchPath=ใใฃในใใใใใน [{0}] ไธญใฎใใฉใฐใกใณใใฏ้คๅปใใใพใใ | |||
request.illegalWrap=ใชใฏใจในใใฉใใใผใฏ getRequest() ใงๅๅพใใใชใฏใจในใใใฉใใใใชใใใฐใชใใพใใใ | |||
request.notAsync=้ๅๆใขใผใใงใฏใชใใชใฏใจในใใงใใฎใกใฝใใใๅผใณๅบใใใจใฏใงใใพใใใ(ไพใใฐ isAsyncStarted() ใ false ใ่ฟใๅ ดๅ) | |||
requestFacade.nullRequest=ใชใฏใจในใใชใใธใงใฏใใฏใชใตใคใฏใซใใใใฎใใกใตใผใใซ้ข้ฃไปใใใใชใใชใใพใใใ | |||
requestFacade.nullRequest=ใชใฏใจในใใชใใธใงใฏใใฏๅๅใใใใฎใใกใตใผใใซ้ข้ฃไปใใใใชใใชใใพใใใ | |||
response.illegalWrap=ใฌในใใณในใฉใใใผใฏใgetResponse()ใใๅๅพใใใฌในใใณในใใฉใใใใๅฟ ่ฆใใใใพใใ | |||
response.sendRedirectFail=[{0}] ใธใฎใชใใคใฌใฏใใๅคฑๆใใพใใใ | |||
@@ -82,6 +82,7 @@ request.asyncNotSupported=ํ์ฌ ์ฒด์ธ์ ํํฐ ๋๋ ์๋ธ๋ฆฟ์ด, ๋น๋๊ธฐ | |||
request.fragmentInDispatchPath=๋์คํจ์น ๊ฒฝ๋ก [{0}](์ผ)๋ก๋ถํฐ URI fragment๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. | |||
request.illegalWrap=์์ฒญ wrapper๋ ๋ฐ๋์ getRequest()๋ก๋ถํฐ ์ป์ด์ง ์์ฒญ์ wrapํด์ผ ํฉ๋๋ค. | |||
request.notAsync=๋ง์ผ ํ์ฌ์ ์ฐ๋ ๋๊ฐ ๋น๋๊ธฐ ๋ชจ๋์ ์์ง ์๋ค๋ฉด, ์ด ๋ฉ์๋๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๋ถํ๋ฉ๋๋ค. (์ฆ, isAsyncStarted()๊ฐ false๋ฅผ ๋ฐํํ๋ ๊ฒฝ์ฐ) | |||
request.session.failed=๋ค์ ์ค๋ฅ๋ก ์ธํด ์ธ์ [{0}]์(๋ฅผ) ๋ก๋ํ์ง ๋ชปํ์ต๋๋ค: [{1}] | |||
requestFacade.nullRequest=์์ฒญ ๊ฐ์ฒด๊ฐ ์ด๋ฏธ ์ฐธ์กฐ ํด์ ๋์๊ณ , ๋ ์ด์ ์ด facade์ ์ฐ๊ด๋์ง ์์ต๋๋ค. | |||
@@ -13,49 +13,80 @@ | |||
# See the License for the specific language governing permissions and | |||
# limitations under the License. | |||
coyoteAdapter.accesslogFail=ๅฐ่ฏๅ่ฎฟ้ฎๆฅๅฟๆทปๅ ๆก็ฎๆถๅ็ๅผๅธธใ | |||
coyoteAdapter.asyncDispatch=ๅค็ๅผๆญฅ่ฏทๆฑๆถๅ็ๅผๅธธ | |||
coyoteAdapter.authenticate=่ฟๆฅๅจๆไพ็็ป่ฟ่บซไปฝ้ช่ฏ็็จๆท[{0}]ใ | |||
coyoteAdapter.authorize=(:ไฝฟ็จTomcat็้ขๅๆๆ็จๆท[{0}] | |||
coyoteAdapter.checkRecycled.request=้ๅฐๆชๅๆถ็่ฏทๆฑๅนถๅผบๅถๅๆถใ | |||
coyoteAdapter.checkRecycled.response=้ๅฐ้ๅๆถ็็ธๅบๅนถๅผบ่กๅๆถใ | |||
coyoteAdapter.debug=ๅ้[{0}]็ๅผไธบ[{1}]ใ | |||
coyoteAdapter.nullRequest=ๅผๆญฅๅๆดพๅช่ฝๅจ็ฐๆ่ฏทๆฑไธๅ็ | |||
coyoteConnector.invalidEncoding=็ผ็ [{0}] ไธ่ฝ่ขซ JRE ่ฏๅซ๏ผConnector ๅฐ็ปง็ปญไฝฟ็จ [{1}] | |||
coyoteConnector.invalidPort=่ฟๆฅๅจไธ่ฝๅฏๅจ๏ผๅ ไธบๆๅฎ็็ซฏๅฃ [{0}]ๆ ๆ | |||
coyoteConnector.notAsciiSuperset=็ผ็ [{0}]ไธๆฏRFC 7230่ฆๆฑ็ASCII่ถ ้ใ่ฟๆฅๅจๅฐ็ปง็ปญไฝฟ็จ[{1}] | |||
coyoteConnector.parseBodyMethodNoTrace=ๆนๆณTRACE็ฆๆญขๅ ๅซๅฎไฝ๏ผ่ฏฆๆ ๆฅ็RFC 2616 ็ซ ่ 9.6๏ผ | |||
coyoteConnector.protocolHandlerDestroyFailed=ๅ่ฎฎๅค็็จๅบ้ๆฏๅคฑ่ดฅ | |||
coyoteConnector.protocolHandlerInitializationFailed=ๅ่ฎฎๅค็็จๅบๅๅงๅๅคฑ่ดฅ | |||
coyoteConnector.protocolHandlerInstantiationFailed=ๅ่ฎฎๅค็็จๅบๅฎไพๅๅคฑ่ดฅ | |||
coyoteConnector.protocolHandlerNoAprLibrary=้ ็ฝฎ็ๅ่ฎฎ[{0}]้่ฆไธๅฏ็จ็APR/ๆฌๆบๅบ | |||
coyoteConnector.protocolHandlerNoAprListener=้ ็ฝฎ็ๅ่ฎฎ[{0}]้่ฆไธๅฏ็จ็aprlifecycleListener | |||
coyoteConnector.protocolHandlerPauseFailed=ๅ่ฎฎๅค็็จๅบๆๅๅคฑ่ดฅ | |||
coyoteConnector.protocolHandlerResumeFailed=ๅ่ฎฎๅค็็จๅบๆขๅคๅคฑ่ดฅ | |||
coyoteConnector.protocolHandlerStartFailed=ๅ่ฎฎๅค็ๅจๅฏๅจๅคฑ่ดฅ | |||
coyoteConnector.protocolHandlerStopFailed=ๅ่ฎฎๅค็็จๅบ.ๅๆญขๅคฑ่ดฅ | |||
coyoteInputStream.nbNotready=ๅจ้้ปๅกๆจกๅผไธ๏ผๅชๆไนๅ็่ฏปๆฐๆฎๅฎๆ๏ผๅนถไธisReady()ๆนๆณ่ฟๅtrue๏ผไฝ ๆๅฏไปฅไฝฟ็จ ServletInputStream ่ฏปๅๆฐๆฎ | |||
coyoteOutputStream.nbNotready=ๅจ้้ปๅกๆจกๅผไธ๏ผๅจไธไธๆฌกๅๅ ฅๅฎๆไธisReady๏ผ๏ผ่ฟๅtrueไนๅ๏ผๆจไธ่ฝๅๅ ฅServletOutputStream | |||
coyoteRequest.alreadyAuthenticated=ๆญค่ฏทๆฑๅทฒ้่ฟ่บซไปฝ้ช่ฏ | |||
coyoteRequest.attributeEvent=ๅฑๆงไบไปถไพฆๅฌๅจๅผๅ็ๅผๅธธ | |||
coyoteRequest.authenticate.ise=):ๆไบคๅๅบๅๆ ๆณ่ฐ็จauthenticate() | |||
coyoteRequest.changeSessionId=ๆ ๆณๆดๆน session IDใ ๆฒกๆไธๆญค่ฏทๆฑๅ ณ่็ sessionใ | |||
coyoteRequest.chunkedPostTooLarge=็ฑไบ่ฏทๆฑๅๆฐๆฐๆฎๅคชๅคง๏ผๅฏผ่ดๅๆฐไธ่ฝ่งฃๆใๅ ไธบๅฝๅ่ฏทๆฑๆฏๅ็ถ่ฏทๆฑ๏ผๅ็ปญไนไธไผๅค็ใๅฆๆๅบ็จ็จๅบ้่ฆๆฅๆถๅคง็POST่ฏทๆฑ๏ผๅฏไปฅไฝฟ็จ่ฟๆฅๅจ็maxPostSize่งฃๅณๅฎใ | |||
coyoteRequest.filterAsyncSupportUnknown=ๆ ๆณ็กฎๅฎๆฏๅฆๆไปปไฝ่ฟๆปคๅจไธๆฏๆๅผๆญฅๅค็ | |||
coyoteRequest.getContextPath.ise=ๆพไธๅฐ่ง่ไธไธๆ่ทฏๅพ[{0}]ไธ็จๆทไปฃ็[{1}]ๆไพ็URIไน้ด็ๅน้ ้กนใ | |||
coyoteRequest.getInputStream.ise=ๅทฒไธบๆญค่ฏทๆฑ่ฐ็จgetReader๏ผ๏ผ | |||
coyoteRequest.getReader.ise=ๅฝๅ่ฏทๆฑๅทฒ็ป่ฐ็จ่ฟๆนๆณgetInputStream() | |||
coyoteRequest.gssLifetimeFail=ไธบ็จๆทไธปไฝ [{0}] ่ทๅๅฉไฝ็ๅฝๆๅคฑ่ดฅ | |||
coyoteRequest.maxPostSizeExceeded=):ๅคงๅค้จๅ่ฏทๆฑๅ ๅซ็ๅๆฐๆฐๆฎ๏ผไธๅ ๆฌไธ่ฝฝ็ๆไปถ๏ผ่ถ ่ฟไบๅ ณ่่ฟๆฅๅจไธ่ฎพ็ฝฎ็maxPostSize ็้ๅถ | |||
coyoteRequest.noAsync=ๆ ๆณๅฏๅจasync๏ผๅ ไธบๅค็้พไธญ็ไธๅ็ฑปไธๆฏๆasync[{0}] | |||
coyoteRequest.noMultipartConfig=็ฑไบๆฒกๆๆไพmulti-part้ ็ฝฎ๏ผๆ ๆณๅค็parts | |||
coyoteRequest.parseParameters=ๅค็ๅๅธ็ๅๆฐๆถๅผๅๅผๅธธ | |||
coyoteRequest.postTooLarge=ๆชๅๆๅๆฐ๏ผๅ ไธบๅๅธ็ๆฐๆฎๅคชๅคงใๅฆๆๅบ็จ็จๅบๅบๆฅๅๅคงๅpost๏ผ่ฏทไฝฟ็จ่ฟๆฅๅจ็maxPostSizeๅฑๆงๆฅ่งฃๅณๆญค้ฎ้ขใ | |||
coyoteRequest.sendfileNotCanonical=ๆ ๆณ็กฎๅฎๆๅฎ็จไบsendfile็ๆไปถ[{0}]็่ง่ๅ็งฐ | |||
coyoteRequest.sessionCreateCommitted=ๆไบคๅๅบๅๆ ๆณๅๅปบไผ่ฏ | |||
coyoteRequest.sessionEndAccessFail=ๅจๅๆถ่ฏทๆฑๆถ๏ผๅผๅธธ่งฆๅไบๅฏนไผ่ฏ็็ปๆ่ฎฟ้ฎใ | |||
coyoteRequest.setAttribute.namenull=ไธ่ฝๅจไธไธช็ฉบ็ๅๅญไธ่ฐ็จsetAttribute | |||
coyoteRequest.trailersNotReady=ๅจisTrailerFieldsReady๏ผ๏ผ่ฟๅtrueไนๅ่ฐ็จgetTrailerFields๏ผ๏ผๆฏ้ๆณ็ | |||
coyoteRequest.uploadCreate=ๆ นๆฎservlet[{1}]็่ฆๆฑๅๅปบไธดๆถไธ่ฝฝไฝ็ฝฎ[{0}] | |||
coyoteRequest.uploadCreateFail=ๆ ๆณๅๅปบไธ่ฝฝไฝ็ฝฎ[{0}] | |||
coyoteRequest.uploadLocationInvalid=ไธดๆถไธไผ ่ทฏๅพ[{0}]ๆ ๆ | |||
coyoteResponse.encoding.invalid=JREๆ ๆณ่ฏๅซ็ผ็ [{0}] | |||
coyoteResponse.getOutputStream.ise=ๅทฒไธบๆญคๅๅบ่ฐ็จgetWriter๏ผ๏ผ | |||
coyoteResponse.getWriter.ise=ๅฝๅๅๅบๅทฒ็ป่ฐ็จไบๆนๆณgetOutputStream() | |||
coyoteResponse.reset.ise=ๅทฒ็ปๆไบคๅๅบๅๆ ๆณ่ฐ็จreset() | |||
coyoteResponse.resetBuffer.ise=ๆไบคๅๅบๅๆ ๆณ้็ฝฎ็ผๅฒๅบ | |||
coyoteResponse.sendError.ise=ๅๅบๆไบคๅๆ ๆณ่ฐ็จsendError() | |||
coyoteResponse.sendRedirect.ise=ๆไบคๅๅบๅๆ ๆณ่ฐ็จsendRedirect๏ผ๏ผใ | |||
coyoteResponse.sendRedirect.note=<html><body><p>้ๅฎๅๅฐ<a href="{0}">{0}</a></p></body></html> | |||
coyoteResponse.setBufferSize.ise=ๅๅ ฅๆฐๆฎๅๆ ๆณๆดๆน็ผๅฒๅบๅคงๅฐ | |||
inputBuffer.requiresNonBlocking=้้ปๅกๆจกๅผไธไธๅฏ็จ | |||
inputBuffer.streamClosed=ๅ ณ้ญ็ๆตใ | |||
outputBuffer.writeNull=่ฆๅๅ ฅ็ๅญ็ฌฆไธฒๅๆฐ๏ผString๏ผint๏ผint๏ผไธ่ฝไธบ็ฉบ | |||
request.asyncNotSupported=ๅฝๅ้พ็็ญ้ๅจๆservletไธๆฏๆๅผๆญฅๆไฝใ | |||
request.fragmentInDispatchPath=่ฐๅบฆ่ทฏๅพ[{0}]ไธญ็็ๆฎตๅทฒ่ขซๅ ้ค | |||
request.illegalWrap=่ฏทๆฑๅ ่ฃ ๅจๅฟ ้กปๅ ่ฃ ไปgetRequest๏ผ๏ผ่ทๅพ็่ฏทๆฑ | |||
request.notAsync=ๅฆๆๅฝๅ่ฏทๆฑไธๅจๅผๆญฅๆจกๅผไธ๏ผๅ่ฐ็จๆญคๆนๆณๆฏ้ๆณ็๏ผๅณisAsyncStarted๏ผ๏ผ่ฟๅfalse๏ผ | |||
requestFacade.nullRequest=่ฏทๆฑๅฏน่ฑกๅทฒ่ขซๅๆถ๏ผไธๅไธๆญคfacadeๅ ณ่ | |||
response.illegalWrap=ๅๅบๅ ่ฃ ๅจๅฟ ้กปๅ ่ฃ ไปgetResponse๏ผ๏ผ่ทๅพ็ๅๅบ | |||
response.sendRedirectFail=้ๅฎๅๅฐ[{0}]ๅคฑ่ดฅ | |||
responseFacade.nullResponse=ๅๅบๅฏน่ฑกๅทฒ่ขซๅๆถ๏ผไธๅไธๆญคๅค่งๅ ณ่ |
@@ -962,8 +962,7 @@ public class Request implements HttpServletRequest { | |||
} | |||
// Take a copy to prevent ConcurrentModificationExceptions if used to | |||
// remove attributes | |||
Set<String> names = new HashSet<>(); | |||
names.addAll(attributes.keySet()); | |||
Set<String> names = new HashSet<>(attributes.keySet()); | |||
return Collections.enumeration(names); | |||
} | |||
@@ -1592,12 +1591,11 @@ public class Request implements HttpServletRequest { | |||
context.getServletContext(), getRequest(), name, value); | |||
} | |||
for (int i = 0; i < listeners.length; i++) { | |||
if (!(listeners[i] instanceof ServletRequestAttributeListener)) { | |||
for (Object o : listeners) { | |||
if (!(o instanceof ServletRequestAttributeListener)) { | |||
continue; | |||
} | |||
ServletRequestAttributeListener listener = | |||
(ServletRequestAttributeListener) listeners[i]; | |||
ServletRequestAttributeListener listener = (ServletRequestAttributeListener) o; | |||
try { | |||
if (replaced) { | |||
listener.attributeReplaced(event); | |||
@@ -1629,12 +1627,11 @@ public class Request implements HttpServletRequest { | |||
ServletRequestAttributeEvent event = | |||
new ServletRequestAttributeEvent(context.getServletContext(), | |||
getRequest(), name, value); | |||
for (int i = 0; i < listeners.length; i++) { | |||
if (!(listeners[i] instanceof ServletRequestAttributeListener)) { | |||
for (Object o : listeners) { | |||
if (!(o instanceof ServletRequestAttributeListener)) { | |||
continue; | |||
} | |||
ServletRequestAttributeListener listener = | |||
(ServletRequestAttributeListener) listeners[i]; | |||
ServletRequestAttributeListener listener = (ServletRequestAttributeListener) o; | |||
try { | |||
listener.attributeRemoved(event); | |||
} catch (Throwable t) { | |||
@@ -2010,8 +2007,7 @@ public class Request implements HttpServletRequest { | |||
if (!isTrailerFieldsReady()) { | |||
throw new IllegalStateException(sm.getString("coyoteRequest.trailersNotReady")); | |||
} | |||
Map<String,String> result = new HashMap<>(); | |||
result.putAll(coyoteRequest.getTrailerFields()); | |||
Map<String, String> result = new HashMap<>(coyoteRequest.getTrailerFields()); | |||
return result; | |||
} | |||
@@ -2977,6 +2973,11 @@ public class Request implements HttpServletRequest { | |||
try { | |||
session = manager.findSession(requestedSessionId); | |||
} catch (IOException e) { | |||
if (log.isDebugEnabled()) { | |||
log.debug(sm.getString("request.session.failed", requestedSessionId, e.getMessage()), e); | |||
} else { | |||
log.info(sm.getString("request.session.failed", requestedSessionId, e.getMessage())); | |||
} | |||
session = null; | |||
} | |||
if ((session != null) && !session.isValid()) { | |||
@@ -15,6 +15,9 @@ | |||
See the License for the specific language governing permissions and | |||
limitations under the License. | |||
--> | |||
<!DOCTYPE mbeans-descriptors PUBLIC | |||
"-//Apache Software Foundation//DTD Model MBeans Configuration File" | |||
"http://jakarta.apache.org/commons/dtds/mbeans-descriptors.dtd"> | |||
<mbeans-descriptors> | |||
<!-- This MBean contains Connector attributes and some common attributes of | |||
@@ -219,8 +219,7 @@ public class ApplicationContext implements ServletContext { | |||
@Override | |||
public Enumeration<String> getAttributeNames() { | |||
Set<String> names = new HashSet<>(); | |||
names.addAll(attributes.keySet()); | |||
Set<String> names = new HashSet<>(attributes.keySet()); | |||
return Collections.enumeration(names); | |||
} | |||
@@ -312,8 +311,7 @@ public class ApplicationContext implements ServletContext { | |||
@Override | |||
public Enumeration<String> getInitParameterNames() { | |||
Set<String> names = new HashSet<>(); | |||
names.addAll(parameters.keySet()); | |||
Set<String> names = new HashSet<>(parameters.keySet()); | |||
// Special handling for XML settings as these attributes will always be | |||
// available if they have been set on the context | |||
if (context.getTldValidation()) { | |||
@@ -456,10 +454,8 @@ public class ApplicationContext implements ServletContext { | |||
dispatchData.set(dd); | |||
} | |||
MessageBytes uriMB = dd.uriMB; | |||
uriMB.recycle(); | |||
// Use the thread local mapping data | |||
MessageBytes uriMB = dd.uriMB; | |||
MappingData mappingData = dd.mappingData; | |||
try { | |||
@@ -489,7 +485,11 @@ public class ApplicationContext implements ServletContext { | |||
} finally { | |||
// Recycle thread local data at the end of the request so references | |||
// are not held to a completed request as there is potential for | |||
// that to trigger a memory leak if a context is unloaded. | |||
// that to trigger a memory leak if a context is unloaded. Not | |||
// strictly necessary here for uriMB but it needs to be recycled at | |||
// some point so do it here for consistency with mappingData which | |||
// must be recycled here. | |||
uriMB.recycle(); | |||
mappingData.recycle(); | |||
} | |||
} | |||
@@ -1364,10 +1364,7 @@ public class ApplicationContext implements ServletContext { | |||
protected void clearAttributes() { | |||
// Create list of attributes to be removed | |||
List<String> list = new ArrayList<>(); | |||
for (String s : attributes.keySet()) { | |||
list.add(s); | |||
} | |||
List<String> list = new ArrayList<>(attributes.keySet()); | |||
// Remove application originated attributes | |||
// (read only attributes will be left in place) | |||
@@ -737,14 +737,8 @@ final class ApplicationDispatcher implements AsyncDispatcher, RequestDispatcher | |||
} | |||
// Release the filter chain (if any) for this request | |||
try { | |||
if (filterChain != null) | |||
filterChain.release(); | |||
} catch (Throwable e) { | |||
ExceptionUtils.handleThrowable(e); | |||
wrapper.getLogger().error(sm.getString("standardWrapper.releaseFilters", | |||
wrapper.getName()), e); | |||
// FIXME: Exception handling needs to be similar to what is in the StandardWrapperValue | |||
if (filterChain != null) { | |||
filterChain.release(); | |||
} | |||
// Deallocate the allocated servlet instance | |||
@@ -100,14 +100,14 @@ public final class ApplicationFilterFactory { | |||
String servletName = wrapper.getName(); | |||
// Add the relevant path-mapped filters to this filter chain | |||
for (int i = 0; i < filterMaps.length; i++) { | |||
if (!matchDispatcher(filterMaps[i] ,dispatcher)) { | |||
for (FilterMap filterMap : filterMaps) { | |||
if (!matchDispatcher(filterMap, dispatcher)) { | |||
continue; | |||
} | |||
if (!matchFiltersURL(filterMaps[i], requestPath)) | |||
if (!matchFiltersURL(filterMap, requestPath)) | |||
continue; | |||
ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) | |||
context.findFilterConfig(filterMaps[i].getFilterName()); | |||
context.findFilterConfig(filterMap.getFilterName()); | |||
if (filterConfig == null) { | |||
// FIXME - log configuration problem | |||
continue; | |||
@@ -116,14 +116,14 @@ public final class ApplicationFilterFactory { | |||
} | |||
// Add filters that match on servlet name second | |||
for (int i = 0; i < filterMaps.length; i++) { | |||
if (!matchDispatcher(filterMaps[i] ,dispatcher)) { | |||
for (FilterMap filterMap : filterMaps) { | |||
if (!matchDispatcher(filterMap, dispatcher)) { | |||
continue; | |||
} | |||
if (!matchFiltersServlet(filterMaps[i], servletName)) | |||
if (!matchFiltersServlet(filterMap, servletName)) | |||
continue; | |||
ApplicationFilterConfig filterConfig = (ApplicationFilterConfig) | |||
context.findFilterConfig(filterMaps[i].getFilterName()); | |||
context.findFilterConfig(filterMap.getFilterName()); | |||
if (filterConfig == null) { | |||
// FIXME - log configuration problem | |||
continue; | |||
@@ -160,8 +160,8 @@ public final class ApplicationFilterFactory { | |||
// Match on context relative request path | |||
String[] testPaths = filterMap.getURLPatterns(); | |||
for (int i = 0; i < testPaths.length; i++) { | |||
if (matchFiltersURL(testPaths[i], requestPath)) { | |||
for (String testPath : testPaths) { | |||
if (matchFiltersURL(testPath, requestPath)) { | |||
return true; | |||
} | |||
} | |||
@@ -242,8 +242,8 @@ public final class ApplicationFilterFactory { | |||
return true; | |||
} else { | |||
String[] servletNames = filterMap.getServletNames(); | |||
for (int i = 0; i < servletNames.length; i++) { | |||
if (servletName.equals(servletNames[i])) { | |||
for (String name : servletNames) { | |||
if (servletName.equals(name)) { | |||
return true; | |||
} | |||
} | |||
@@ -17,6 +17,7 @@ | |||
package org.apache.catalina.core; | |||
import java.util.Arrays; | |||
import java.util.Collection; | |||
import java.util.EnumSet; | |||
import java.util.HashSet; | |||
@@ -119,9 +120,7 @@ public class ApplicationFilterRegistration | |||
for (FilterMap filterMap : filterMaps) { | |||
if (filterMap.getFilterName().equals(filterDef.getFilterName())) { | |||
for (String servletName : filterMap.getServletNames()) { | |||
result.add(servletName); | |||
} | |||
result.addAll(Arrays.asList(filterMap.getServletNames())); | |||
} | |||
} | |||
return result; | |||
@@ -135,9 +134,7 @@ public class ApplicationFilterRegistration | |||
for (FilterMap filterMap : filterMaps) { | |||
if (filterMap.getFilterName().equals(filterDef.getFilterName())) { | |||
for (String urlPattern : filterMap.getURLPatterns()) { | |||
result.add(urlPattern); | |||
} | |||
result.addAll(Arrays.asList(filterMap.getURLPatterns())); | |||
} | |||
} | |||
return result; | |||
@@ -24,6 +24,7 @@ import java.io.UnsupportedEncodingException; | |||
import java.nio.charset.Charset; | |||
import java.nio.charset.StandardCharsets; | |||
import java.util.ArrayList; | |||
import java.util.Arrays; | |||
import java.util.Collections; | |||
import java.util.Enumeration; | |||
import java.util.List; | |||
@@ -779,8 +780,8 @@ class ApplicationHttpRequest extends HttpServletRequestWrapper { | |||
*/ | |||
protected boolean isSpecial(String name) { | |||
for (int i = 0; i < specials.length; i++) { | |||
if (specials[i].equals(name)) | |||
for (String special : specials) { | |||
if (special.equals(name)) | |||
return true; | |||
} | |||
return false; | |||
@@ -849,17 +850,13 @@ class ApplicationHttpRequest extends HttpServletRequestWrapper { | |||
if (values1 == null) { | |||
// Skip - nothing to merge | |||
} else { | |||
for (String value : values1) { | |||
results.add(value); | |||
} | |||
results.addAll(Arrays.asList(values1)); | |||
} | |||
if (values2 == null) { | |||
// Skip - nothing to merge | |||
} else { | |||
for (String value : values2) { | |||
results.add(value); | |||
} | |||
results.addAll(Arrays.asList(values2)); | |||
} | |||
String values[] = new String[results.size()]; | |||
@@ -18,6 +18,7 @@ package org.apache.catalina.core; | |||