Petua Java 42: Tulis aplikasi Java yang berfungsi dengan firewall berasaskan proksi

Hampir setiap syarikat mengambil berat untuk melindungi rangkaian dalamannya daripada penggodam dan pencuri. Salah satu langkah keselamatan yang biasa adalah dengan memutuskan sepenuhnya rangkaian syarikat dari Internet. Sekiranya orang jahat tidak dapat menyambung ke mesin anda, mereka tidak dapat meretasnya. Kesan sampingan malang dari taktik ini ialah pengguna dalaman tidak dapat mengakses pelayan Internet luaran, seperti Yahoo atau JavaWorld. Untuk mengatasi masalah ini, pentadbir rangkaian sering memasang sesuatu yang disebut "pelayan proksi." Pada dasarnya, proksi adalah perkhidmatan yang berada di antara Internet dan rangkaian dalaman dan menguruskan hubungan antara dua dunia. Proksi membantu mengurangkan ancaman keselamatan di luar sambil masih membenarkan pengguna dalaman mengakses perkhidmatan Internet. Walaupun Java memudahkan untuk menulis klien Internet, pelanggan ini tidak berguna kecuali mereka dapat melepasi proksi anda. Nasib baik, Java memudahkan kerja dengan proksi - jika anda tahu kata-kata ajaib, iaitu.

Rahsia untuk menggabungkan Java dan proksi terletak pada pengaktifan sifat sistem tertentu dalam jangka masa Java. Sifat-sifat ini tampaknya tidak berdokumen, dan dibisikkan antara pengaturcara sebagai bagian dari cerita rakyat Jawa. Untuk bekerja dengan proksi, aplikasi Java anda perlu menentukan maklumat mengenai proksi itu sendiri dan juga menentukan maklumat pengguna untuk tujuan pengesahan. Dalam program anda, sebelum anda mula menggunakan protokol Internet, anda perlu menambahkan baris berikut:

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

Baris pertama di atas memberitahu Java bahawa anda akan menggunakan proksi untuk sambungan anda, baris kedua menentukan mesin di mana proksi hidup, dan baris ketiga menunjukkan pelabuhan yang sedang didengarkan oleh proksi. Beberapa proksi memerlukan pengguna untuk memasukkan nama pengguna dan kata laluan sebelum akses Internet diberikan. Anda mungkin pernah menghadapi tingkah laku ini jika menggunakan penyemak imbas Web di belakang firewall. Inilah cara untuk melakukan pengesahan:

Sambungan URLC = url.openConnection (); String password = "nama pengguna: kata laluan"; String encodedPassword = base64Encode (kata laluan); sambungan.setRequestProperty ("Proxy-Authorization", encodedPassword);

Idea di sebalik pecahan kod di atas adalah bahawa anda mesti menyesuaikan tajuk HTTP anda untuk menghantar maklumat pengguna anda. Ini dicapai dengan setRequestProperty()panggilan. Kaedah ini membolehkan anda memanipulasi tajuk HTTP sebelum permintaan dihantar. HTTP memerlukan nama pengguna dan kata laluan dikodkan base64. Nasib baik, terdapat beberapa API domain awam yang akan melakukan pengekodan untuk anda (lihat bahagian Sumber).

Seperti yang anda lihat, tidak banyak menambahkan sokongan proksi ke aplikasi Java anda. Memandangkan apa yang anda ketahui sekarang, dan sedikit penyelidikan (anda harus mengetahui bagaimana proksi anda mengendalikan protokol yang anda minati dan bagaimana menangani pengesahan pengguna), anda boleh melaksanakan proksi anda dengan protokol lain.

Proksi FTP

Scott D. Taylor menghantar mantera ajaib untuk menangani proxy protokol FTP:

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

Anda kemudian boleh mengakses URL fail menggunakan protokol "ftp" melalui sesuatu seperti:

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

Sekiranya ada yang mempunyai contoh menggunakan proksi dengan protokol Internet lain, saya ingin melihatnya.

Catatan: Kod contoh (Contoh.java) hanya diuji dengan JDK 1.1.4.

Ron Kurr telah bekerja sebagai jurutera perisian di Cabletron Systems selama lapan tahun terakhir, menggunakan C ++, Unix, dan NT. Selama dua tahun terakhir, dia telah mengabdikan diri untuk teknologi Java dan Internet.

Ketahui lebih lanjut mengenai topik ini

  • java.lang.Sistem //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 Pelanggan HTTP //www.innovation.ch/java/HTTPClient/
  • Sistem Cabletron //www.cabletron.com/
  • CsProxy (pelayan proksi percuma) //www.cabletron.com/csproxy/
  • RFC yang berkaitan //www.cabletron.com/csproxy/handbook/rfc/

Kisah ini, "Tip Java 42: Tulis aplikasi Java yang berfungsi dengan firewall berasaskan proksi" pada awalnya diterbitkan oleh JavaWorld.