Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

วิธีกำหนด multiple filters ใน JSP (web.xml)

เว็บแอปพลิเคชันสามารถกำหนดหลาย 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)