ฉันได้เรียนรู้ตัวกรองมาก่อน แต่ตัวกรองใช้สำหรับ servlets และใช้ในสปริง MVC และสปริง พวกเขาไม่รู้สึกมีประโยชน์มากในแง่ของฟังก์ชั่น
มาเรียนรู้เกี่ยวกับ interceptors ที่นี่
1. คำสั่งของการดำเนินการของ interceptor
1. สารบัญ
2. interceptor
ใน Interceptor ฉันเพิ่มสาม (ครั้งแรกสอง, สาม) แต่เนื้อหาเกือบจะเหมือนกัน
แพ็คเกจ org.elvin.boot.interceptor; นำเข้า org.springframework.web.servlet.handlerinterceptor; นำเข้า org.springframework.web.servlet.modelandview; นำเข้า Javax.servlet.http.httpservletrequest; FirstInterceptor ใช้ HandlerInterceptor {@Override บูลีนสาธารณะ prehandle (httpservletrequest httpservletrequest, httpservletResponse httpservletResponse, วัตถุ o) โยนข้อยกเว้น {system.out.println ( กลับมาจริง; } @Override โมฆะสาธารณะ Postthandle (httpservletRequest httpservletRequest, httpservletResponse httpservletResponse, Object O, ModelandView ModelandView) โยนข้อยกเว้น {system.out.println ( } @Override โมฆะสาธารณะ ftercompletion (httpservletRequest httpservletrequest, httpservletResponse httpservletResponse, Object O, Exception e) การโยนข้อยกเว้น {system.out.println ("FirstInterceptor -Prehandle ส่งคืนจริงก่อนที่การดำเนินการต่อไปนี้จะดำเนินต่อไป
การลงทะเบียน Interceptor:
แพ็คเกจ org.elvin.boot.interceptor; นำเข้า org.springframework.context.annotation.configuration; นำเข้า org.springframework.web.servlet.config.annotation.interceptorregistry; org.springframework.web.servlet.config.annotation.webmvcconfigureradapter; @configurationPublic คลาส registerinctor ขยาย WebMVCCONFigureradapter registry.addinterceptor (ใหม่ twointerceptor ()); registry.addinterceptor (ใหม่ที่สาม interceptor ()); super.addinterceptors (รีจิสทรี); -
เพื่อตรวจสอบลำดับการดำเนินการ thymeleaf จะถูกใช้ที่นี่จากนั้นคุณสมบัติที่ฉันผ่านในพื้นหลังถูกเข้าถึงในเบื้องหน้า เมื่อเข้าถึงข้อมูลจะถูกพิมพ์ไปยังคอนโซล
แพ็คเกจ org.elvin.boot.pojo; หนังสือเรียนสาธารณะ {ชื่อสตริงส่วนตัว; สตริงสาธารณะ getName () {system.out.println ("ดู: book'name คือ" + ชื่อ); ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; -คอนโทรลเลอร์:
แพ็คเกจ org.elvin.boot.controller; นำเข้า org.elvin.boot.pojo.book; นำเข้า org.springframework.stereotype.controller; นำเข้า org.springframework.ui.model; org.springframework.web.bind.annotation.requestmapping;@controller@requestmapping ("แรก") คลาสสาธารณะ FirstController {Private String ControllerPath = "First/"; @getMapping ("ดัชนี") ดัชนีสตริงสาธารณะ (รุ่นโมเดล) {system.out.println ("คอนโทรลเลอร์: ดัชนี FirstController ทำ ... "); หนังสือหนังสือ = หนังสือเล่มใหม่ (); Book.setName ("Spring Boot"); model.addattribute ("หนังสือ", หนังสือ); Return ControllerPath + "ดัชนี"; -ดู:
<! doctype html> <html lang = "en"> <head> <meta charset = "utf-8"/> <title> ชื่อเรื่อง </title> </head> <body> <h1 th: text = "$ {book.name}"> </h1>เมื่อเข้าถึง LocalHost: 8080/First/INDEX ข้อมูลการตอบกลับจะถูกส่งออกบนคอนโซล
ด้วยวิธีนี้สามารถมองเห็นคำสั่งการดำเนินการของ interceptor เดียวได้
1. วิธีการ prehandle ดำเนินการก่อนที่จะดำเนินการวิธีการคอนโทรลเลอร์
2. ดำเนินการวิธีการควบคุมคอนโทรลเลอร์
3. หลังจากดำเนินการดำเนินการก่อนที่จะแยกวิเคราะห์มุมมอง (ถ้ามี) ให้ดำเนินการวิธีการหลังการรับรู้ของ interceptor
4. วิเคราะห์มุมมอง
5. หลังจากการแยกวิเคราะห์ให้ดำเนินการวิธีการหลังจากนั้น
เมื่อลงทะเบียนหลายตัวดักจับคำสั่งการดำเนินการดังแสดงในรูป
2. Interceptor ดำเนินการตรวจสอบการอนุญาต
ในทำนองเดียวกันเพิ่ม interceptor การอนุญาตก่อน
แพ็คเกจ org.elvin.boot.interceptor; นำเข้า org.elvin.boot.annotation.nologin; นำเข้า org.springframework.util.stringutils; นำเข้า org.springframework.web.method.handlermethod; org.springframework.web.servlet.modelandview; นำเข้า Javax.servlet.http.httpservletrequest นำเข้า Javax.servlet.http.httpservletresponse; Prehandle (คำขอ httpservletrequest, การตอบสนอง httpservletResponse, การจัดการวัตถุ) โยนข้อยกเว้น {วิธี handlermethod method = (handlermethod) ที่จับ; คลาส <?> controllerType = method.getBeanType (); if (method.getMetHodannotation (nologin.class)! = null || controllerType.getAnnotation (nologin.class)! = null) {return true; } httpsession session = request.getSession (); String token = (string) session.getAttribute ("โทเค็น"); if (! stringutils.isempty (โทเค็น)) {return true; } Response.Sendredirect ("/ล็อกอิน/ดัชนี"); กลับเท็จ; } @Override โมฆะสาธารณะ Postthandle (httpservletRequest httpservletRequest, httpservletResponse httpservletResponse, Object O, ModelandView ModelandView) โยนข้อยกเว้น {} @Override Void Public httpservletResponse, Object O, Exception E) โยนข้อยกเว้น {}}จากนั้นลงทะเบียน Interceptor การอนุญาต
แพ็คเกจ org.elvin.boot.interceptor; นำเข้า org.springframework.context.annotation.configuration; นำเข้า org.springframework.web.servlet.config.annotation.interceptorregistry; org.springframework.web.servlet.config.annotation.webmvcconfigureradapter; @configurationpublic คลาส registerinterceptor ขยาย webmvcconfigureradapter {@Override public addinterceptors super.addinterceptors (รีจิสทรี); -เพิ่มตัวควบคุมการเข้าสู่ระบบลงในคอนโทรลเลอร์ให้หน้าเข้าสู่ระบบและวิธีการออกจากระบบ
แพ็คเกจ org.elvin.boot.controller; นำเข้า org.elvin.boot.annotation.nologin; นำเข้า org.springframework.beans.factory.annotation.AutoWired; นำเข้า org.springframework.stereotype.controller; org.springframework.web.bind.annotation.postmapping; นำเข้า org.springframework.web.bind.annotation.requestmapping; นำเข้า org.springframework.web.bind.annotation.responsebody; javax.servlet.http.httpservletResponse; นำเข้า javax.servlet.http.httpsession;@nologin@controller@requestmapping ("เข้าสู่ระบบ") การร้องขอ LoginController ส่วนตัว @autowired ส่วนตัว httpservletresponse การตอบสนอง; String Private String controllerPath = "เข้าสู่ระบบ/"; // @nologin @getMapping ("ดัชนี") ดัชนีสตริงสาธารณะ () {httpsession session = request.getSession (); session.setAttribute ("โทเค็น", "โทเค็น"); Return ControllerPath + "ดัชนี"; } // @nologin @postmapping ("เช็คเอาต์") @ResponseBody สตริงสาธารณะชำระเงิน () {httpsession session = request.getSession (); session.setAttribute ("โทเค็น", null); กลับ "ตกลง"; -ที่นี่ฉันได้ทำคำอธิบายประกอบที่ปราศจากการเข้าสู่ระบบซึ่งสามารถเพิ่มลงในคอนโทรลเลอร์หรือการกระทำ
แพ็คเกจ org.elvin.boot.annotation; นำเข้า java.lang.annotation.elementtype; นำเข้า java.lang.annotation.retention; นำเข้า java.lang.annotation.retentionpolicy; นำเข้า Java.lang.lang.annotation.target; ElementType.method}) @retention (RetentionPolicy.runtime) สาธารณะ @Interface nologin {}ไม่จำเป็นต้องมีเนื้อหาในคำอธิบายประกอบ
หน้าเข้าสู่ระบบ (หน้าเข้าสู่ระบบที่นี่มีไว้สำหรับการออกจากระบบดังนั้นหลังจากเข้าเยี่ยมชมหน้านี้หมายความว่าการเข้าสู่ระบบสำเร็จ)
<! doctype html> <html xmlns: th = "http://www.thymeleaf.org"> <head> <meta charset = "utf-8"/> <title> title </title> </head> <body> <body> th: src = "@{/js/jQuery-1.11.1.js}"> </script> <script th: inline = "javascript"> $ (ฟังก์ชัน () {$ (". container"). มอบหมาย ("#checkout", "คลิก" {}, ความสำเร็จ: ฟังก์ชั่น (res) {if (res == "ok") {alert ("logout สำเร็จ"); }); </script> </body> </html>วิธีการสาธิตผลลัพธ์:
ในเบราว์เซอร์ให้เปิดหน้า http: // localhost: 8080/ล็อกอิน/ดัชนีแล้วเข้าถึงหน้า http: // localhost: 8080/หน้าแรก/ดัชนีในแท็บใหม่
คุณจะพบว่าเมื่อเข้าถึงครั้งแรก/ดัชนีคุณสามารถเข้าถึงได้
ในเวลานี้ในหน้าเข้าสู่ระบบ/ดัชนีคลิกปุ่มออกจากระบบรีเฟรชหน้าแรก/ดัชนีและคุณจะข้ามไปที่หน้าเข้าสู่ระบบโดยตรง
ตัวอย่างข้างต้นคำอธิบายของการบูตสตริงและตัวดักจับแบบกำหนดเองเป็นเนื้อหาทั้งหมดที่ฉันแบ่งปันกับคุณ ฉันหวังว่าคุณจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น