You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2020/01/21 17:50:06 UTC

[tomcat] branch master updated: Java Servlet -> Jakarta Servlet request attributes for AJP Connector

This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/master by this push:
     new 0aa5a8d  Java Servlet -> Jakarta Servlet request attributes for AJP Connector
0aa5a8d is described below

commit 0aa5a8de8c24f79df4da3f3135eee5dd2e54c2ba
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Jan 21 17:49:54 2020 +0000

    Java Servlet -> Jakarta Servlet request attributes for AJP Connector
---
 java/org/apache/coyote/ajp/AjpProcessor.java | 18 ++++++++++++++++++
 webapps/docs/changelog.xml                   |  4 ++++
 2 files changed, 22 insertions(+)

diff --git a/java/org/apache/coyote/ajp/AjpProcessor.java b/java/org/apache/coyote/ajp/AjpProcessor.java
index 01e7d3d..0c593ba 100644
--- a/java/org/apache/coyote/ajp/AjpProcessor.java
+++ b/java/org/apache/coyote/ajp/AjpProcessor.java
@@ -25,6 +25,9 @@ import java.nio.ByteBuffer;
 import java.security.NoSuchProviderException;
 import java.security.cert.CertificateFactory;
 import java.security.cert.X509Certificate;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
 
 import jakarta.servlet.http.HttpServletResponse;
 
@@ -78,6 +81,9 @@ public class AjpProcessor extends AbstractProcessor {
     private static final byte[] pongMessageArray;
 
 
+    private static final Map<String,String> jakartaAttributeMapping;
+
+
     static {
         // Allocate the end message array
         AjpMessage endMessage = new AjpMessage(16);
@@ -118,6 +124,14 @@ public class AjpProcessor extends AbstractProcessor {
         pongMessageArray = new byte[pongMessage.getLen()];
         System.arraycopy(pongMessage.getBuffer(), 0, pongMessageArray,
                 0, pongMessage.getLen());
+
+        // Build Map of Java Servlet to Jakarta Servlet attribute names
+        Map<String,String> m = new HashMap<>();
+        m.put("javax.servlet.request.cipher_suite", "jakarta.servlet.request.cipher_suite");
+        m.put("javax.servlet.request.key_size", "jakarta.servlet.request.key_size");
+        m.put("javax.servlet.request.ssl_session", "jakarta.servlet.request.ssl_session");
+        m.put("javax.servlet.request.X509Certificate", "jakarta.servlet.request.X509Certificate");
+        jakartaAttributeMapping = Collections.unmodifiableMap(m);
     }
 
 
@@ -728,6 +742,10 @@ public class AjpProcessor extends AbstractProcessor {
                     }
                 } else if(n.equals(Constants.SC_A_SSL_PROTOCOL)) {
                     request.setAttribute(SSLSupport.PROTOCOL_VERSION_KEY, v);
+                } else if (jakartaAttributeMapping.containsKey(n)) {
+                    // AJP uses the Java Servlet attribute names.
+                    // Need to convert these to Jakarta SAervlet.
+                    request.setAttribute(jakartaAttributeMapping.get(n), v);
                 } else {
                     request.setAttribute(n, v );
                 }
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 33fceaa..d7324e1 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -72,6 +72,10 @@
       <update>
         Remove unused NIO blocking selector. (remm)
       </update>
+      <add>
+        When using an AJP Connector, convert Java Servlet specific request
+        attributes to the Jakarta Servlet equivalent. (markt)
+      </add>
     </changelog>
   </subsection>
   <subsection name="Other">


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org