Programmering

Java Tip 42: Skriv Java-apps, der fungerer med proxybaserede firewalls

Næsten alle virksomheder er beskæftiget med at beskytte sit interne netværk mod hackere og tyve. En almindelig sikkerhedsforanstaltning er at afbryde virksomhedens netværk fuldstændigt fra Internettet. Hvis de onde ikke kan oprette forbindelse til nogen af ​​dine maskiner, kan de ikke hacke ind på dem. Den uheldige bivirkning af denne taktik er, at interne brugere ikke kan få adgang til eksterne internetservere som Yahoo eller JavaWorld. For at løse dette problem installerer netværksadministratorer ofte noget, der kaldes en "proxyserver". I det væsentlige er en proxy en tjeneste, der sidder mellem Internettet og det interne netværk og administrerer forbindelser mellem de to verdener. Fuldmagter hjælper med at reducere sikkerhedstrusler udefra, mens de stadig giver interne brugere adgang til internettjenester. Mens Java gør det let at skrive internetklienter, er disse klienter ubrugelige, medmindre de kan komme forbi din proxy. Heldigvis gør Java det let at arbejde med proxyer - hvis du kender de magiske ord, altså.

Hemmeligheden bag at kombinere Java og proxyer ligger i at aktivere visse systemegenskaber i Java-runtime. Disse egenskaber ser ud til at være udokumenteret og hviskes mellem programmører som en del af Java folklore. For at arbejde med en proxy skal din Java-applikation angive oplysninger om selve proxyen samt angive brugeroplysninger til godkendelsesformål. Før du begynder at arbejde med internetprotokoller, skal du tilføje følgende linjer i dit program:

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

Den første linje ovenfor fortæller Java, at du bruger en proxy til dine forbindelser, den anden linje specificerer den maskine, som proxyen lever på, og den tredje linje angiver, hvilken port proxyen lytter til. Nogle fuldmagter kræver, at en bruger indtaster et brugernavn og en adgangskode, før der gives internetadgang. Du har sandsynligvis stødt på denne adfærd, hvis du bruger en webbrowser bag en firewall. Sådan udføres godkendelsen:

URLConnection forbindelse = url.openConnection (); Strengadgangskode = "brugernavn: adgangskode"; String encodedPassword = base64Encode (adgangskode); connection.setRequestProperty ("Proxy-autorisation", kodetPassword); 

Ideen bag ovenstående kodefragment er, at du skal justere din HTTP-header for at sende dine brugeroplysninger. Dette opnås med setRequestProperty () opkald. Denne metode giver dig mulighed for at manipulere HTTP-overskrifterne, før anmodningen sendes ud. HTTP kræver, at brugernavnet og adgangskoden skal være base64-kodet. Heldigvis er der et par offentlige domæne API'er, der udfører kodningen for dig (se afsnittet Ressourcer).

Som du kan se, er der ikke meget at tilføje proxy-support til din Java-applikation. I betragtning af hvad du nu ved, og lidt research (du bliver nødt til at finde ud af, hvordan din proxy håndterer den protokol, du er interesseret i, og hvordan du håndterer brugergodkendelse), kan du implementere din proxy med andre protokoller.

Proxy-FTP

Scott D. Taylor sendte den magiske besværgelse ind for at beskæftige sig med fuldmagt til FTP-protokollen:

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

Du kan derefter få adgang til filens URL'er ved hjælp af "ftp" -protokollen via noget som:

URL url = ny URL ("ftp://ftp.netscape.com/pub/navigator/3.04/windows/readme.txt"); 

Hvis nogen har eksempler på at bruge en proxy med andre internetprotokoller, vil jeg meget gerne se dem.

Bemærk: Eksempelkoden (eksempel.java) er kun testet med JDK 1.1.4.

Ron Kurr har arbejdet som softwareingeniør hos Cabletron Systems i de sidste otte år ved hjælp af C ++, Unix og NT. I de sidste to år har han viet sig Java- og internetteknologier.

Lær mere om dette emne

  • 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
  • HTTP Client API //www.innovation.ch/java/HTTPClient/
  • Cabletron Systems //www.cabletron.com/
  • CsProxy (en gratis proxyserver) //www.cabletron.com/csproxy/
  • Relevante RFC'er //www.cabletron.com/csproxy/handbook/rfc/

Denne historie, "Java Tip 42: Skriv Java-apps, der fungerer med proxybaserede firewalls" blev oprindeligt udgivet af JavaWorld.