Penapis JSP
Penapis dalam Servlets dan JSP ialah kelas Java, dan tujuan kewujudannya adalah seperti berikut:
Pemintasan apabila meminta akses kepada sumber back-end
Uruskan respons yang dikembalikan daripada pelayan kepada pelanggan
Terdapat beberapa jenis penapis yang biasa digunakan disenaraikan di bawah:
Penapis pengesahan
Penapis mampatan data
Penapis penyulitan
Cetuskan akses sumber Penapis untuk acara
Penapis penukaran imej
Penapis log masuk dan pengesahan
Penapis rantai Jenis MIME
Penapis token
Penapis XSL/T yang mengubah kandungan XML
Penapis akan dimasukkan ke dalam web .xml dan petakan servlet, nama fail JSP atau corak URL. Fail penerangan pengerahan web.xml boleh didapati dalam direktori <Tomcat-installation-directory>conf.
Apabila bekas JSP memulakan aplikasi web, ia akan mencipta tika setiap penapis ini mesti diisytiharkan dalam fail deskriptor penggunaan web.xml dan dilaksanakan mengikut susunan pengisytiharan.
Kaedah penapis servlet
Penapis ialah kelas Java yang melaksanakan antara muka javax.servlet.Filter. Antara muka javax.servlet.Filter mentakrifkan tiga kaedah:
Nombor siri | < th>Kaedah &Penerangan|||||||||
---|---|---|---|---|---|---|---|---|---|
1 | public void doFilter (ServletRequest, ServletResponse, FilterChain)
<🎜>Bekas akan memanggil kaedah ini apabila permintaan/tindak balas melalui rantai penapis, kerana pelanggan meminta sumber pada penghujungnya daripada rantaian< /td> | ||||||||
2 | public void init(FilterConfig filterConfig)<🎜> <🎜>The container memanggil kaedah ini Menunjukkan bahawa penapis diletakkan dalam perkhidmatan | ||||||||
3 | public void destroy()<🎜> <🎜>Bekas memanggil kaedah ini untuk menunjukkan bahawa penapis sedang dialih keluar daripada perkhidmatan |
Contoh penapis JSP
Contoh ini akan mencetak alamat IP serta tarikh dan masa setiap akses kepada fail JSP. Sudah tentu, ini hanyalah contoh mudah untuk memberi anda idea tentang penggunaan penapis mudah, tetapi anda boleh menggunakan konsep ini untuk membina program yang lebih kompleks sendiri.
// 引入Java包 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; // 实现 Filter 类 public class LogFilter implements Filter { public void init(FilterConfig config) throws ServletException{ // 获取初始化参数 String testParam = config.getInitParameter("test-param"); //打印初始化参数 System.out.println("Test Param: " + testParam); } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException { // 获取客户端ip地址 String ipAddress = request.getRemoteAddr(); // 输出ip地址及当前时间 System.out.println("IP "+ ipAddress + ", Time " + new Date().toString()); // 传递请求道过滤器链 chain.doFilter(request,response); } public void destroy( ){ /* 在Filter实例在服务器上被移除前调用。*/ } }
Kompilasikan fail LogFilter.java, dan kemudian letakkan fail kelas yang dihimpun dalam direktori <Tomcat installation>/webapps/ROOT/WEB-INF/classes.
Pemetaan penapis JSP dalam fail web.xml
Penapis ditakrifkan dan kemudian dipetakan ke URL atau nama fail JSP, sama seperti servlet ditakrifkan dan kemudian dipetakan. Dalam fail huraian penempatan web.xml, gunakan teg <penapis> untuk pemetaan penapis:
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Penapis di atas akan digunakan pada semua servlet dan program JSP kerana kami menentukan " /*". Anda juga boleh menentukan laluan servlet atau JSP jika anda hanya mahu menggunakan penapis pada beberapa servlet atau program JSP.
Sekarang, akses halaman servlet atau JSP seperti biasa, dan anda akan mendapati bahawa rekod akses ini dijana dalam log pelayan. Anda juga boleh menggunakan logger Log4J untuk log ke fail lain.
Menggunakan berbilang penapis
Aplikasi web anda boleh mentakrifkan banyak penapis yang berbeza. Memandangkan anda mempunyai dua penapis yang ditakrifkan, AuthenFilter dan LogFilter, langkah lain adalah sama seperti sebelumnya, kecuali anda membuat pemetaan yang berbeza, seperti ini:
<filter> <filter-name>LogFilter</filter-name> <filter-class>LogFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter> <filter-name>AuthenFilter</filter-name> <filter-class>AuthenFilter</filter-class> <init-param> <param-name>test-param</param-name> <param-value>Initialization Paramter</param-value> </init-param> </filter> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Pesanan Aplikasi Penapis
Susunan elemen <penapis> dipetakan dalam web.xml menentukan susunan bekas menggunakan penapis ini. Untuk membalikkan susunan aplikasi, anda hanya membalikkan susunan elemen <penapis>
Sebagai contoh, contoh di atas akan menggunakan LogFilter dahulu dan kemudian AuthenFilter, tetapi contoh berikut akan membalikkan susunan aplikasi:
<filter-mapping> <filter-name>AuthenFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>LogFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>