最初に基本的なAUTHを持つサーバーAからPDFをダウンロードしようとしています。次に、PDFがサーバーにダウンロードされたら、ブラウザプラグインが読み取ることができる新しいウィンドウ/タブでユーザーに表示します。ユーザー名とパスワードをプレーンテキストで送信しないように、これを実行しようとしています。最初にサーバーにダウンロードすると、ユーザー名とパスワードを非表示にして、ファイルをユーザーに表示することができると考えました。これまでのところ、動作しない私のコードは次のとおりです。何も起こりません。
//Get URL For The PDF File
StringBuilder parameters = new StringBuilder();
parameters.append("api=getDocument");
parameters.append("&documentType=report");
parameters.append("&documentID=").append(selectedReport);
URL url;
HttpURLConnection connection = null;
try {
//Create connection
url = new URL(apiURL);
//Create connection
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
BASE64Encoder enc = new sun.misc.BASE64Encoder();
String userpassword = userName + ":" + password;
String encodedAuthorization = enc.encode(userpassword.getBytes());
connection.setRequestProperty("Authorization", "Basic " + encodedAuthorization);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("Content-Length", "" + Integer.toString(URLEncoder.encode(parameters.toString(), "UTF-8").getBytes().length));
connection.setRequestProperty("Content-Language", "en-US");
connection.setUseCaches(false);
connection.setDoInput(true);
connection.setDoOutput(true);
//Send request
DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
wr.writeBytes(parameters.toString());
wr.flush();
wr.close();
//Get Response
InputStream is = connection.getInputStream();
BufferedReader rd = new BufferedReader(new InputStreamReader(is));
//Convert to Byte Array
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[16384];
while ((nRead = is.read(data, 0, data.length)) != -1) {
buffer.write(data, 0, nRead);
}
buffer.flush();
// Prepare.
FacesContext facesContext = FacesContext.getCurrentInstance();
ExternalContext externalContext = facesContext.getExternalContext();
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
BufferedOutputStream output = null;
int DEFAULT_BUFFER_SIZE = 10240;
// Init servlet response.
response.reset();
response.setHeader("Content-Type", "application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"" + "report.pdf" + "\"");
output = new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE);
// Write file contents to response.
byte[] buff = buffer.toByteArray();
int length;
while ((length = is.read(buff)) > 0) {
output.write(buff, 0, length);
}
// Finalize task.
output.flush();
//Keep The Below
rd.close();
facesContext.responseComplete();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}