1. ในแอปพลิเคชันฤดูใบไม้ผลิเรามีการใช้การกรองสองครั้งหนึ่งคือตัวดักจับและอีกอันหนึ่งเป็นตัวกรอง เราจะแนะนำการใช้ตัวกรองใน Springboot ที่นี่ การใช้ตัวกรองใน SpringMVC นั้นเหมือนกัน แต่มีความแตกต่างเล็กน้อยในการกำหนดค่า
2. ฟังก์ชั่นตัวกรองอนุญาตให้ผู้ใช้เปลี่ยนคำขอและแก้ไขการตอบกลับ ตัวกรองไม่ใช่ servlet แต่ไม่สามารถสร้างการตอบกลับได้ สามารถประมวลผลคำขอล่วงหน้าก่อนที่คำขอจะมาถึง servlet หรือสามารถจัดการการตอบกลับเมื่อออกจาก servlet กล่าวอีกนัยหนึ่งตัวกรองเป็น "การผูกมัด servlet" (เชนเซิร์ฟเล็ต)
ตัวกรองรวมถึง:
1) สกัดกั้นก่อนที่ servlet จะเรียกว่า;
2) ตรวจสอบคำขอ servlet ก่อนที่ servlet จะถูกเรียก;
3) แก้ไขส่วนหัวคำขอและขอข้อมูลตามต้องการ
4) แก้ไขส่วนหัวการตอบสนองและข้อมูลการตอบสนองตามต้องการ
5) สกัดกั้นหลังจาก servlet เรียกว่า
1. สถานการณ์แอปพลิเคชันของตัวกรอง
ผ่านความเข้าใจของตัวกรองตัวกรองเราสามารถรู้ได้ว่าการประมวลผลบางอย่างสามารถทำได้ในสามสถานการณ์ต่อไปนี้:
1> ตัดสินใจว่าจะต้องเข้าถึงทรัพยากรเป้าหมายหรือไม่โดยการควบคุมการโทรไปยังวิธี chain.dofilter
ตัวอย่างเช่นคุณสามารถตรวจสอบในสิทธิ์ของผู้ใช้ ฯลฯ ตรวจสอบว่าผู้ใช้มีสิทธิ์ในการเข้าถึงทรัพยากรบางอย่างมีสิทธิ์ที่จะเปิดตัวและไม่ดำเนินการวิธี chain.dofilter โดยไม่ได้รับอนุญาต
2> วัตถุประสงค์บางอย่างสามารถทำได้โดยการประมวลผลบางอย่างก่อนที่จะเรียกใช้วิธี chain.dofilter
ตัวอย่างเช่นแก้ไขปัญหาของรหัสที่อ่านไม่ออกภาษาจีน ฯลฯ ก่อนที่จะมีวิธี Dofilter การเข้ารหัสการเข้ารหัสคำขอการตั้งค่าและการตอบสนองสามารถทำได้ คุณยังสามารถห่อหุ้มและตกแต่งอินเตอร์เฟสคำขอเพื่อจัดการกับปัญหาที่อ่านไม่ออกของจีนในการขอวิธีการขอ (เขียนคำขอที่สอดคล้องกันใหม่ GetParameter)
3> วัตถุประสงค์บางอย่างสามารถทำได้โดยการประมวลผลบางอย่างหลังจากโทรไปที่โซ่วิธีการกรอง
ตัวอย่างเช่นบีบอัดทั้งเว็บไซต์ ก่อนที่จะเรียกใช้วิธี chain.dofilter ให้ห่อหุ้มและตกแต่งวัตถุการตอบสนองด้วยคลาส A, แทนที่ GetOutputStream และแทนที่วิธี GetWriter ภายในคลาส A เนื้อหาเอาต์พุตจะถูกแคชลงในสตรีม ByteArrayOutputStream จากนั้นหลังจากใช้วิธี chain.dofilter, ข้อมูลแคชสตรีมของ ByteArrayOutputStream ในคลาส A และบีบอัดด้วยสตรีม GZIPOUTPUTTREAM
2. หลักการของการสกัดกั้นตัวกรอง
มีวิธี Dofilter ในอินเทอร์เฟซตัวกรอง เมื่อผู้พัฒนาเขียนคลาสตัวกรองเพื่อใช้วิธี Dofilter และกำหนดค่าทรัพยากรเว็บที่จะสกัดกั้นเว็บเซิร์ฟเวอร์จะเรียกวิธี Dofilter ของตัวกรองก่อนก่อนที่จะเรียกใช้วิธีการบริการของทรัพยากรเว็บ (กำหนดโดยกลไกการเข้าถึงภายในของเซิร์ฟเวอร์)
3. กฎการกรอง
// กรองทรัพยากรทั้งหมดในแอปพลิเคชัน ไฟล์ทั้งหมดภายใต้รูทของแอปพลิเคชันปัจจุบันรวมไฟล์ทั้งหมดภายใต้ไดเรกทอรีย่อยหลายระดับ โปรดทราบว่า * นำหน้าด้วย "/" ลงทะเบียน. addurlpatterns ("/ *"); // กรองทรัพยากรประเภทไฟล์ที่ระบุไฟล์ HTML ทั้งหมดภายใต้รูทของแอปพลิเคชันปัจจุบัน หมายเหตุ: ไม่มี "/" ก่อน *.html มิฉะนั้นการลงทะเบียนข้อผิดพลาด Addurlpatterns (". html"); // กรองไฟล์ทั้งหมดภายใต้ไดเรกทอรีที่ระบุ ไฟล์ทั้งหมดภายใต้ไดเรกทอรีย่อย folder_name (สามารถเป็นไดเรกทอรีย่อยหลายระดับ) ภายใต้รูทของแอปพลิเคชันปัจจุบัน addurlpatterns ("/folder_name/*"); // กรองการลงทะเบียนไฟล์ที่ระบุ. addurlpatterns ("/index.html");iii. แอปพลิเคชัน
@component @servletComponentscan @webFilter (urlpatterns = "/login/*", filtername = "loginFilter") คลาสสาธารณะ LoginFilter ใช้ตัวกรอง {@Override void เริ่มต้น ServletResponse, FilterChain FilterChain) พ่น IOException, ServleTexception {} @Override โมฆะสาธารณะทำลาย () {}}4. คำอธิบาย:
1. จุดประสงค์ของคำอธิบายประกอบนี้ @component คือการมอบ LoginFilter ให้กับคอนเทนเนอร์สำหรับการประมวลผล นั่นคือการทำให้ LoginFilter ทำงานได้
2. @ServletComponentScan ใช้เพื่อสแกน @WebFilter เพื่อให้ @WebFilter ทำงานได้ แน่นอนว่ามันเป็นไปได้ที่จะอธิบายท่อลวด servlet @ServletComponentScan นี้ดีที่สุดในการถอนการติดตั้งแอปพลิเคชันการกำหนดค่าทั่วไป ฉันมีตัวกรองเพียงตัวเดียวที่นี่ดังนั้นฉันจึงไม่ได้เขียนลงในแอปพลิเคชัน
3. @WebFilter มีประโยชน์อย่างชัดเจน ลิงค์ใดที่ใช้ในการกรองและทำไมชื่อของตัวกรองจึงเป็น
5. การแนะนำสั้น ๆ เกี่ยวกับการใช้ตัวกรองใน SpringMVC
1. วิธีการเขียนยังคงเหมือนเดิม มันสืบทอดตัวกรองเพื่อใช้ 3 วิธีในการประมวลผล
2. โยนลงในคอนเทนเนอร์: สิ่งนี้จะต้องกำหนดค่าใน web.xml
<silter> <filter-name> loginFilter </filter-name> <silter-class> com.troy.boot.filter.loginfilter </filter-class> </lilter>
3. คุณสามารถศึกษาการใช้งานที่เฉพาะเจาะจงได้ด้วยตัวเอง
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น