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

remm pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/10.1.x by this push:
     new 8621e4c6ba Encode redirect URL used by the rewrite valve with session 
id
8621e4c6ba is described below

commit 8621e4c6ba2c916a41eb34cb0f781171ead33fb6
Author: remm <r...@apache.org>
AuthorDate: Tue Jun 3 13:53:01 2025 +0200

    Encode redirect URL used by the rewrite valve with session id
    
    Handle different cross context session configuration.
    BZ69699
---
 java/org/apache/catalina/connector/Request.java           | 2 +-
 java/org/apache/catalina/valves/rewrite/RewriteValve.java | 7 +++++--
 webapps/docs/changelog.xml                                | 5 +++++
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/java/org/apache/catalina/connector/Request.java 
b/java/org/apache/catalina/connector/Request.java
index c3afae0eeb..94d518d341 100644
--- a/java/org/apache/catalina/connector/Request.java
+++ b/java/org/apache/catalina/connector/Request.java
@@ -517,7 +517,7 @@ public class Request implements HttpServletRequest {
     }
 
 
-    protected void recycleSessionInfo() {
+    public void recycleSessionInfo() {
         if (session != null) {
             try {
                 session.endAccess();
diff --git a/java/org/apache/catalina/valves/rewrite/RewriteValve.java 
b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
index 8c4375c18c..2c79aefc2f 100644
--- a/java/org/apache/catalina/valves/rewrite/RewriteValve.java
+++ b/java/org/apache/catalina/valves/rewrite/RewriteValve.java
@@ -462,11 +462,13 @@ public class RewriteValve extends ValveBase {
                     if (context && urlStringEncoded.charAt(0) == '/' && 
!UriUtil.hasScheme(urlStringEncoded)) {
                         urlStringEncoded.insert(0, 
request.getContext().getEncodedPath());
                     }
+                    String redirectPath;
                     if (rule.isNoescape()) {
-                        
response.sendRedirect(UDecoder.URLDecode(urlStringEncoded.toString(), 
uriCharset));
+                        redirectPath = 
UDecoder.URLDecode(urlStringEncoded.toString(), uriCharset);
                     } else {
-                        response.sendRedirect(urlStringEncoded.toString());
+                        redirectPath = urlStringEncoded.toString();
                     }
+                    
response.sendRedirect(response.encodeRedirectURL(redirectPath));
                     response.setStatus(rule.getRedirectCode());
                     done = true;
                     break;
@@ -578,6 +580,7 @@ public class RewriteValve extends ValveBase {
                         chunk.append(host.toString());
                     }
                     request.getMappingData().recycle();
+                    request.recycleSessionInfo();
                     // Reinvoke the whole request recursively
                     Connector connector = request.getConnector();
                     try {
diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml
index 76cfd6117e..fa97e4bb77 100644
--- a/webapps/docs/changelog.xml
+++ b/webapps/docs/changelog.xml
@@ -121,6 +121,11 @@
         the new <code>ParameterLimitValve</code>. The valve allows configurable
         URL-specific limits on the number of parameters. (dsoumis)
       </add>
+      <fix>
+        <bug>69699</bug>: Encode redirect URL used by the rewrite valve with
+        the session id if appropriate, and handle cross context with different
+        session configuration when using rewrite. (remm)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">


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

Reply via email to