เว็บแอปพลิเคชันสามารถกำหนดหลาย filters โดยแต่ละ filter มีวัตถุประสงค์ต่างกัน ต้องกำหนด filter และ filter-mapping ใน web.xml
ตัวอย่าง: 2 Filters (LogFilter และ AuthenFilter)
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>com.example.LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Parameter</param-value>
</init-param>
</filter>
<filter>
<filter-name>AuthenFilter</filter-name>
<filter-class>com.example.AuthenFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Parameter</param-value>
</init-param>
</filter>
<!-- Mapping ลำดับที่ 1: LogFilter -->
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Mapping ลำดับที่ 2: AuthenFilter -->
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
ลำดับการทำงานของ Filters
ลำดับของ filter-mapping ใน web.xml กำหนดลำดับการรัน
- ตัวอย่างข้างต้น: LogFilter → AuthenFilter
- ต้องการสลับลำดับ: ย้าย filter-mapping ของ AuthenFilter ไปก่อน LogFilter
ตัวอย่างสลับลำดับ
<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>
ตอนนี้: AuthenFilter → LogFilter
ข้อสังเกต
- แต่ละ filter ต้องมี
<filter>และ<filter-mapping>คู่กัน url-patternสามารถเฉพาะเจาะจงได้ (เช่น/admin/*,*.jsp)init-paramใช้ส่งค่าตั้งค่าให้ filter ตอน init- Filter chain เรียกผ่าน
chain.doFilter(request, response)