https://issues.apache.org/bugzilla/show_bug.cgi?id=56876
Bug ID: 56876
Summary: sendRedirect address wrong at port mapping or proxied
.
Product: Tomcat 6
Version: unspecified
Hardware: All
OS: All
Status: NEW
Severity: critical
Priority: P2
Component: Catalina
Assignee: [email protected]
Reporter: [email protected]
sendRedirect address wrong at port mapping or proxied .
eg:
http://www.domaintest.com/ maping to: http://192.168.1.123:8080/
index.jsp
code:
<%
response.sendRedirect("/abc.jsp");
%>
when enter http://www.domaintest.com/
out put header for Location:
Location: http://192.168.1.123:8080/abc.jsp
is not http://www.domainttest/abc.jsp
found tomcatcode at org.apache.catalina.connector.Response#toAbsolute
code:
private String toAbsolute(String location) {
if (location == null)
return (location);
boolean leadingSlash = location.startsWith("/");
if (leadingSlash || !hasScheme(location)) {
redirectURLCC.recycle();
String scheme = request.getScheme();
String name = request.getServerName(); //## bug at here !!!!!! ,can
use host header .
int port = request.getServerPort();
try {
redirectURLCC.append(scheme, 0, scheme.length());
redirectURLCC.append("://", 0, 3);
redirectURLCC.append(name, 0, name.length());
if ((scheme.equals("http") && port != 80)
|| (scheme.equals("https") && port != 443)) {
redirectURLCC.append(':');
String portS = port + "";
redirectURLCC.append(portS, 0, portS.length());
}
if (!leadingSlash) {
String relativePath = request.getDecodedRequestURI();
int pos = relativePath.lastIndexOf('/');
relativePath = relativePath.substring(0, pos);
String encodedURI = null;
final String frelativePath = relativePath;
if (SecurityUtil.isPackageProtectionEnabled() ){
try{
encodedURI = (String)AccessController.doPrivileged(
new PrivilegedExceptionAction(){
public Object run() throws IOException{
return
urlEncoder.encodeURL(frelativePath);
}
});
} catch (PrivilegedActionException pae){
IllegalArgumentException iae =
new IllegalArgumentException(location);
iae.initCause(pae.getException());
throw iae;
}
} else {
encodedURI = urlEncoder.encodeURL(relativePath);
}
redirectURLCC.append(encodedURI, 0, encodedURI.length());
redirectURLCC.append('/');
}
redirectURLCC.append(location, 0, location.length());
} catch (IOException e) {
IllegalArgumentException iae =
new IllegalArgumentException(location);
iae.initCause(e);
throw iae;
}
return redirectURLCC.toString();
} else {
return (location);
}
}
--
You are receiving this mail because:
You are the assignee for the bug.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]