2009-12-17 38 views
1

我正在嘗試一個簡短的URL縮短器實現,比如tinyurl.com或bit.ly。目前,我在我的servlet中執行了一個response.sendRedirect(targetURL) - 這對http/ftp目標URL很有效。URL縮短:重定向到'file://'目標(文件協議目標)

但是,我在重定向到諸如file:///c:/temp(其中c:\temp當然是在本地/客戶端系統上)等目標時遇到問題。

在Firefox地址欄上鍵入file:///c:/temp的作品,但從服務器重定向似乎什麼都不做。

這是不可能的一些安全原因?或者我在這裏做錯了什麼?

在此先感謝!

+0

P.S.拉吉很高興接受我的第二個答案,因爲它更好地解釋了這件事。我這樣問的原因,是因爲你接受的答案曾經堅持在頂端,以便爲其他讀者提供幫助。所以,在這種情況下,它不會提供任何有用的東西。這個答案適合娛樂。謝謝。 – 2009-12-17 06:11:12

回答

1

不想破壞我的第一個答案,通過解釋事情的美麗。因此,我決定,解釋應該在這裏,而不是。

那麼,你怎麼能想到首先訪問你的客戶端的本地驅動器。它確實是一個安全問題。就像那樣,您無法訪問客戶端的文件系統。

看來你沒有這個要求。如果你爲了一些理智的原因必須這樣做,那麼你可以考慮一個簽名的applet或者其他的東西,我相信。

就你的困惑而言,它是在你的Firefox上工作。這是因爲你可以訪問你自己的機器,而且URL對於Firefox來說是很好理解的。但是,在一個servlet中,你不能這麼做。閱讀docs爲sendRedirect(),它說

如果該位置爲相對於未經 「/」開頭容器解釋 它作爲相對於當前的請求 URI。如果位置與 相關,則前導'/'容器將其解釋爲 它相對於servlet 容器根。

+0

謝謝 - 這是有道理的。 但是,在IE中 - 重定向適用於「某些」目標。重定向到本地磁盤'C:\ foo.doc'似乎不起作用,但是'D:\ foo.doc'卻沒有 - 其中'D'是網絡驅動器。 – ragebiswas 2009-12-17 04:33:58

+0

其中'D'是網絡驅動器並已安裝。事實上,這將起作用,爲什麼它不應該。不確定使用IE訪問「C」驅動器的問題。你得到什麼信息,BTW? – 2009-12-17 04:42:53

+0

'Internet Explorer無法顯示網頁'錯誤 – ragebiswas 2009-12-17 05:13:42

2

這是不可能的一些安全 的原因?還是我在這裏做錯了 ?

是的。

+0

這是我見過的最接受的答案,很好: – 2009-12-17 20:12:59

+0

對不起周杰倫。老闆讓我接受第二個:) – ragebiswas 2010-01-06 15:20:14