Thanks again Mark for the tip!

Like you suggested I wrapped the response, overriding "setStatus()" - but the 
method didn't get called because the wrapper is not a subclass of the original  
response, it's just a façade. I think the "setStatus()" method of the wrapped 
response (inner object) was called (by "sendRerect())". 
I'm not sure if it would be better if I used a dynamic proxy, not too much 
experience with that...

I also tried overriding "sendRedirect()" on the wrapper, just setting the 
status to 301 and the location header to the location - and it worked! But I'm 
not sure,, somehow it feels wrong- especially compared with the implementation 
of "sendRedirect()" in org.apache.catalina.connector.Response which contains 
quiet some logic which I would circumvent.

What would be your opinion?  


-----Ursprüngliche Nachricht-----
Von: Mark Thomas <ma...@apache.org> 
Gesendet: Donnerstag, 3. Februar 2022 17:41
An: users@tomcat.apache.org
Betreff: Re: AW: Redirect with 301 for directory requested without trailing 
slash

I didn't see a commit in the code but I didn't look into what
sendRedirect() does and I don't recall if there is a commit in there somewhere.

The other option would be the wrap the response in the Filter and override 
setStatus() with something like:

@Override
public void setStatus(int status) {
     if (status == 302) {
         super.setStaus(301);
     } else {
         super.setStaus(status);
     }
}

Completely untested - might not even compile - but you get the idea.

Mark

Reply via email to