幾乎所有的公司都十分關注保護自己的內部網絡
以防黑客及入竊者
一種常見的安全措施是完全斷開與因特網的連接
如果黑客們不能連接到您的任何一台機器
他們就不能非法進入您的系統
這種策略產生的不利副作用是
內部用戶無法訪問外部的因特網服務器
如 Yahoo 或 JavaWorld
為了解決這一問題
網絡管理員通常安裝
代理服務器
實際上
代理是安裝於因特網和內部網之間的一種服務
用來管理這兩個領域之間的連接
代理有助於減少安全性的外部威脅
同時還允許內部用戶訪問因特網服務
盡管 Java 使得編寫因特網客戶機不再困難
但是如果客戶機不能通過代理
則它們毫無用處
幸運的是
Java 使得使用代理支持不再困難
如果您知道密訣
這就是事實
將 Java 和代理結合起來的秘訣即在 Java 運行時激活特定的系統屬性
這些屬性未被寫入正式文件
只是作為 Java 傳說的一部分在 Java 編程人員中秘傳
為了支持代理
Java 應用程序不僅需要指定代理本身的信息
而且需要指定用於認證的用戶信息
在開始使用網際協議之前
您需要在程序中添加以下幾行代碼
System
getProperties()
put(
proxySet
true
);
System
getProperties()
put(
proxyHost
myProxyMachineName
);
System
getProperties()
put(
proxyPort
);
上面的第一行通知 Java 您要通過代理進行連接
第二行指定代理所在的機器
第三行指定代理監聽的端口
有些代理在授權用戶訪問因特網之前
要求用戶輸入用戶名和口令
如果您使用位於防火牆之內的 Web 浏覽器
您就可能碰到過這種情況
以下是執行認證的方法
URLConnection connection = url
openConnection();
String password =
username:password
;
String encodedPassword = base
Encode( password );
connection
setRequestProperty(
Proxy
Authorization
encodedPassword );
這段代碼的思想是
您必須調整 HTTP 標頭以發出用戶信息
這是通過調用 setRequestProperty() 來實現的
這種方法允許您在發出請求之前處理 HTTP 標頭
HTTP 要求用 base
對用戶名和口令進行編碼
幸運的是
有一組公用域 API
它們將代您執行編碼(請參閱參考資源部分)
如您所見
在 Java 應用程序中加入代理支持並不需要做多少工作
有了現在的知識
再做一點研究(您必須查明您的代理是如何處理您感興趣的協議以及如何進行用戶認證的)
您就能用其他協議實現代理
FTP 代理 Scott D
Taylor 提出這個秘訣來處理 FTP 協議代理
defaultProperties
put(
ftpProxySet
true
);
defaultProperties
put(
ftpProxyHost
proxy
host
name
);
defaultProperties
put(
ftpProxyPort
);
接下來您便可以通過以下代碼使用
ftp
協議訪問文件 URL
URL url = new URL(
ftp:///pub/navigator/
/windows/readme
txt
);
如果有人有使用其他網際協議代理的例子
我很想看看
注意
代碼示例 (Example
java) 僅在 JDK
下測試過
後續技巧! 對於仍在使用 JDK
(配合 WebSphere
)的開發人員而言
將 proxyHost 和 proxyPort 設為系統屬性不起作用
conn
getInputStream() 或者返回連接超時
或者是找不到主機路徑
但是
我使用接受 Host 和 Port 為參數的 URL 構造函數解決了這一問題(使用我的代理主機和端口)
public URL(String protocol
String host
int port
String file)
借助用戶名和口令進行認證的方法不起作用
應將
Basic
置於認證字符串的開頭
例如
String encodedPassword = base
Encode( password );
應該是
String encodedPassword =
Basic
+ base
Encode( password );
您也不必用一個單獨的程序來進行
位編碼
您可以使用 sun
misc
BASE
Encoder() 類
下面是完成這兩處改動之後的代碼
System
getProperties()
put(
proxySet
true
);
System
getProperties()
put(
proxyHost
proxyHost);
System
getProperties()
put(
proxyPort
proxyPort);
String authString =
userid:password
;
String auth =
Basic
+ new sun
misc
BASE
Encoder
()
encode(authString
getBytes());
URL url = new URL(
);
URLConnection conn = url
openConnection();
conn
setRequestProperty(
Proxy
Authorization
auth);
下面是使用 socks
代理服務器的方法
System
getProperty(
socksProxySet
true);
System
getProperty(
socksProxyHost
proxyHostName);
System
getProperty(
socksProxyPort
proxyPort);
Usually the proxyPort for Socks
is port
接下來您就可以用 Socks
進行連接了
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19767.html