Java Docker 容器中 Tomcat9/JDK8 的验证器 "Server redirected too many times"
Java Authenticator "Server redirected too many times" from Tomcat9/JDK8 in Docker container
我正在从一个固定的 URL(用于测试)下载一个 pdf 文件,它是一个 Sharepoint list.When 运行 基于 tomcat9 的独立 VM 上的代码,它显示了 pdf但是如果 运行 来自 Docker 基于 tomcat9 的相同工作代码,那么它给服务器重定向了太多次(20)。
下面是代码段-
String attachtmentname = "https://<full url>";
String file_name = "<file>.pdf";
String Userid = "<some id>";
String password = "<some password>";
response.setHeader("Content-type", "application/pdf");
response.setHeader("ReportPDF", "content-description");
response.setHeader("Content-Disposition", "inline; filename=" + file_name);
response.setHeader("Cache-Control", "cache,must-revalidate");
System.setProperty("http.proxyUser", Userid);
System.setProperty("http.proxyPassword", password);
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(Userid, password.toCharArray());
}
});
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
BufferedInputStream in = new BufferedInputStream(new URL(attachtmentname).openStream());
<rest of the code for reading pdf file>
出现“服务器重定向次数过多 (20)”错误
java.net.ProtocolException: Server redirected too many times (20)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1908)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
at java.net.URL.openStream(URL.java:1068)
使用 Java nio 可以正常工作 library.Below 是测试代码,如果它对某人有帮助的话。
String attachtmentname = "https://full url/somefile.pdf";
String Userid = "domain\username";
String password = "password";
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(Userid, password.toCharArray());
}
});
URL url = new URL(attachtmentname);
try (InputStream in = url.openStream()) {
Path pwd = Paths.get("Somepath\someFile1.pdf").toAbsolutePath();
out.println(pwd);
Files.copy(in, pwd, StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
e.printStackTrace();
}
我正在从一个固定的 URL(用于测试)下载一个 pdf 文件,它是一个 Sharepoint list.When 运行 基于 tomcat9 的独立 VM 上的代码,它显示了 pdf但是如果 运行 来自 Docker 基于 tomcat9 的相同工作代码,那么它给服务器重定向了太多次(20)。 下面是代码段-
String attachtmentname = "https://<full url>";
String file_name = "<file>.pdf";
String Userid = "<some id>";
String password = "<some password>";
response.setHeader("Content-type", "application/pdf");
response.setHeader("ReportPDF", "content-description");
response.setHeader("Content-Disposition", "inline; filename=" + file_name);
response.setHeader("Cache-Control", "cache,must-revalidate");
System.setProperty("http.proxyUser", Userid);
System.setProperty("http.proxyPassword", password);
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(Userid, password.toCharArray());
}
});
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
BufferedInputStream in = new BufferedInputStream(new URL(attachtmentname).openStream());
<rest of the code for reading pdf file>
出现“服务器重定向次数过多 (20)”错误
java.net.ProtocolException: Server redirected too many times (20)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1908)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1498)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:268)
at java.net.URL.openStream(URL.java:1068)
使用 Java nio 可以正常工作 library.Below 是测试代码,如果它对某人有帮助的话。
String attachtmentname = "https://full url/somefile.pdf";
String Userid = "domain\username";
String password = "password";
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(Userid, password.toCharArray());
}
});
URL url = new URL(attachtmentname);
try (InputStream in = url.openStream()) {
Path pwd = Paths.get("Somepath\someFile1.pdf").toAbsolutePath();
out.println(pwd);
Files.copy(in, pwd, StandardCopyOption.REPLACE_EXISTING);
} catch (Exception e) {
e.printStackTrace();
}