Съвет за Java 42: Напишете Java приложения, които работят с защитни стени, базирани на прокси

Почти всяка компания се занимава със защитата на вътрешната си мрежа от хакери и крадци. Една обща мярка за сигурност е напълно да се изключи корпоративната мрежа от интернет. Ако лошите не могат да се свържат с някоя от вашите машини, те не могат да ги проникнат. Неприятният страничен ефект на тази тактика е, че вътрешните потребители нямат достъп до външни интернет сървъри, като Yahoo или JavaWorld. За да разрешат този проблем, мрежовите администратори често инсталират нещо, наречено „прокси сървър“. По същество прокси е услуга, която се намира между Интернет и вътрешната мрежа и управлява връзките между двата свята. Прокситата помагат за намаляване на външните заплахи за сигурността, като същевременно позволяват на вътрешните потребители достъп до интернет услуги. Докато Java улеснява писането на интернет клиенти, тези клиенти са безполезни, освен ако не успеят да преодолеят вашия прокси сървър. За щастие, Java улеснява работата с прокси - ако знаете вълшебните думи, т.е.

Тайната на комбинирането на Java и прокси се крие в активирането на определени системни свойства по време на изпълнение на Java. Тези свойства изглеждат без документи и се шепнат между програмистите като част от фолклора на Java. За да работи с прокси, вашето Java приложение трябва да посочи информация за самия прокси, както и да посочи потребителска информация за целите на удостоверяването. Във вашата програма, преди да започнете да работите с някакви интернет протоколи, ще трябва да добавите следните редове:

System.getProperties (). Put ("proxySet", "true"); System.getProperties (). Put ("proxyHost", "myProxyMachineName"); System.getProperties (). Put ("proxyPort", "85");

Първият ред по-горе казва на Java, че ще използвате прокси за вашите връзки, вторият ред посочва машината, на която проксито живее, а третият ред показва на кой порт проксито слуша. Някои прокси сървъри изискват от потребителя да въведе потребителско име и парола, преди да бъде предоставен достъп до Интернет. Вероятно сте се сблъсквали с това поведение, ако използвате уеб браузър зад защитна стена. Ето как да извършите удостоверяването:

URLConnection връзка = url.openConnection (); String password = "потребителско име: парола"; String encodedPassword = base64Encode (парола); connection.setRequestProperty ("Прокси-оторизация", encodedPassword);

Идеята зад горния фрагмент от код е, че трябва да настроите своя HTTP заглавка, за да изпратите вашата потребителска информация. Това се постига с setRequestProperty()обаждането. Този метод ви позволява да манипулирате HTTP заглавките, преди заявката да бъде изпратена. HTTP изисква потребителското име и парола да бъдат кодирани base64. За щастие има няколко приложни програмни интерфейса (API) за публично достояние, които ще изпълнят кодирането вместо вас (вижте раздела Ресурси).

Както можете да видите, няма много добавяне на прокси поддръжка към вашето Java приложение. Като се има предвид това, което сега знаете, и малко проучване (ще трябва да разберете как вашият прокси се справя с протокола, който ви интересува, и как да се справите с удостоверяването на потребителя), можете да внедрите своя прокси с други протоколи.

Проксиране на FTP

Скот Д. Тейлър изпраща вълшебното заклинание да се занимава с проксиране на протокола FTP:

defaultProperties.put ("ftpProxySet", "true"); defaultProperties.put ("ftpProxyHost", "proxy-host-name"); defaultProperties.put ("ftpProxyPort", "85");

След това можете да получите достъп до URL адресите на файловете, използвайки протокола "ftp" чрез нещо като:

URL адрес на URL = нов URL ("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt"); 

Ако някой има примери за използване на прокси с други интернет протоколи, бих се радвал да ги видя.

Забележка: Примерният код (Example.java) е тестван само с JDK 1.1.4.

Рон Кур работи като софтуерен инженер в Cabletron Systems през последните осем години, използвайки C ++, Unix и NT. През последните две години той се е посветил на Java и интернет технологиите.

Научете повече за тази тема

  • java.lang.System //www.javasoft.com/products/jdk/1.1/docs/api/java.lang.System.html
  • java.net.URLConnection //www.javasoft.com/products/jdk/1.1/docs/api/java.net.URLConnection.html
  • API на HTTP клиент //www.innovation.ch/java/HTTPClient/
  • Cabletron Systems //www.cabletron.com/
  • CsProxy (безплатен прокси сървър) //www.cabletron.com/csproxy/
  • Съответни RFCs //www.cabletron.com/csproxy/handbook/rfc/

Тази история, „Java Съвет 42: Напишете Java приложения, които работят с защитни стени, базирани на прокси“, първоначално е публикувана от JavaWorld.