私は2台のサーバーを持っています。そのうちの1台はパブリックで、もう1台はユーザーから隠されています。最初はローカルネットワークの2番目のものを見ることができますが、ユーザーはパブリックネットワーク上の2番目のコンピュータにアクセスできません。Javaの隠されたURLにリダイレクト
一部のURL(特定のパターンを持つ)を公開コンピュータから隠しファイルにリダイレクトする必要があります。非表示のURLは、応答時にヘッダーを返す可能性があります。
現在のところ、この機能をリダイレクトストリームで実装していますが、問題はエンドユーザー/クライアントに対してすべてのヘッダーが含まれていないという問題です。
隠し応答:リダイレクトストリームの後
Accept-Ranges: bytes
Connection: keep-alive
Content-Disposition: filename="0.jpg"
Content-Length: 38903
Content-Range: bytes 0-38902/38903
Content-Type: image/jpeg;charset=UTF-8
Date: Thu, 28 Apr 2016 05:11:48 GMT
Last-Modified: Mon, 25 Apr 2016 06:28:17 GMT
Server: Apache-Coyote/1.1
は応答:私はクライアントにすべてのヘッダーを持つことができますどのように
private void redirectGalleyStream(long diskId, String code, HttpServletResponse response)
throws IOException {
final InputStream is = new URL(Settings.i().getVodServer() + "/downloadGalleryImage" +
"?diskId=" + diskId + "&code=" + code).openStream();
fastCopy(is, response.getOutputStream());
}
public static void fastCopy(final InputStream src, final OutputStream dest) throws IOException {
try {
final ReadableByteChannel inputChannel = Channels.newChannel(src);
final WritableByteChannel outputChannel = Channels.newChannel(dest);
fastCopy(inputChannel, outputChannel);
} finally {
try {
src.close();
} catch (Exception ignored) {
}
try {
dest.close();
} catch (Exception ignored) {
}
}
}
public static void fastCopy(final ReadableByteChannel src, final WritableByteChannel dest) throws IOException {
try {
final ByteBuffer buffer = ByteBuffer.allocateDirect(16 * 1024);
while (src.read(buffer) != -1) {
buffer.flip();
dest.write(buffer);
buffer.compact();
}
buffer.flip();
while (buffer.hasRemaining()) {
dest.write(buffer);
}
} finally {
try {
src.close();
} catch (Exception ignored) {
}
try {
dest.close();
} catch (Exception ignored) {
}
}
}
:
Connection: keep-alive
Content-Length: 38903
Date: Thu, 28 Apr 2016 05:14:06 GMT
Server: Apache-Coyote/1.1
私のコードは、この何かのリンクですか?