Saya telah belajar filter sebelumnya, tetapi filter untuk servlet dan digunakan dalam sepatu bot SpringMVC dan Spring. Mereka tidak merasa sangat berguna dalam hal fungsi.
Mari kita pelajari tentang pencegat di sini.
1. Urutan eksekusi pencegat
1. Isi
2. Interceptor
Di The Interceptor, saya menambahkan tiga (pertama, dua, ketiga), tetapi isinya hampir sama.
Paket org.elvin.boot.interceptor; impor org.springframework.web.servlet.handlerinterceptor; impor org.springframework.web.servlet.modelandview; impor javax.servlet.http.httpservletreest; impor javax.servlet Implement HandlerInterceptor {@Override Public Boolean Prehandle (httpservletRequest httpservletRequest, httpservletResponse httpserVletResponse, objek o) melempar pengecualian {system.out.println ("firstInceptor preHandle"); Kembali Benar; } @Override public void posthandle (httpservletRequest httpservletRequest, httpservletResponse httpservletResponse, objek o, model dan model postthandle); } @Override public void afterCompletion (httpservletRequest httpservletRequest, httpservletResponse httpservletResponse, objek o, pengecualian e) melempar pengecualian {system.out.println ("firstInterceptor aftercompletion"); }}Prehandle mengembalikan true sebelum eksekusi berikut akan berlanjut.
Pendaftaran Interceptor:
Paket org.elvin.boot.interceptor; impor org.springframework.context.annotation.configuration; impor org.springframework.web.servlet.config.annotation.Interceptorregistry; Impor org.springFramework.web.servlet.config.annotation; Class RegisterInterceptor memperluas WebMvCconfigurerAdapter {@Override public void addInterceptors (interceptorregistry registry) {registry.addInterceptor (new firstInterceptor ()); Registry.AddInterceptor (baru TwoInterceptor ()); Registry.AddInterceptor (New ThirdInterceptor ()); Super.AddInterceptors (Registry); }}Untuk memverifikasi perintah eksekusi, Thymeleaf digunakan di sini, dan kemudian sifat -sifat yang saya lewati di latar belakang diakses di latar depan. Saat mengakses, informasi akan dicetak ke konsol
paket org.elvin.boot.pojo; buku kelas publik {name string pribadi; public string getName () {System.out.println ("Lihat: Book'Name adalah" + name); nama pengembalian; } public void setName (name string) {this.name = name; }}Pengontrol:
Paket org.elvin.boot.controller; impor org.elvin.boot.pojo.book; impor org.springframework.stereotype.controller; impor org.springframework.unotation.model; import org.springframework.web.bind.annoPing.getation. org.springframework.web.bind.annotation.requestmapping;@controller@requestMapping ("pertama") kelas publik firstController {private string controllerPath = "first/"; @GetMapping ("index") Public String Index (model model) {System.out.println ("Controller: FirstController Index Doing ..."); Buku buku = buku baru (); book.setname ("Spring Boot"); model.addattribute ("buku", buku); return controllerPath + "index"; }}Melihat:
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"/> <iteme> title </ title> </pead> <hody> <h1 th: text = "$ {book.name}"> </h1> </body> </html>Saat mengakses LocalHost: 8080/First/Index, informasi respons akan output pada konsol.
Dengan cara ini, urutan eksekusi dari satu interseptor dapat dilihat.
1. Metode prehandle dieksekusi sebelum metode pengontrol dieksekusi
2. Jalankan metode tindakan pengontrol
3. Setelah menjalankan tindakan, sebelum mem -parsing tampilan (jika ada), jalankan metode PostThandle dari Interceptor
4. Menganalisis tampilan
5. Setelah penguraian, jalankan metode setelah pemegang lengkap
Ketika beberapa pencegat terdaftar, urutan eksekusi seperti yang ditunjukkan pada gambar.
2. Interceptor mengimplementasikan verifikasi izin
Demikian pula, tambahkan izin pencegat terlebih dahulu
Paket org.elvin.boot.interceptor; impor org.elvin.boot.annotation.nologin; impor org.springframework.util.stringutils; impor org.springframework.web.method.handlermethod; impor org.springframework.weB.servlet org.springframework.web.servlet.modelandview; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletResponse publycepor @handercore @handlingcore @handlyceporscentor; Prehandle (permintaan httpservletRequest, respons httpservletResponse, pegangan objek) melempar Exception {handlermethod metode = (handlermethod) menangani; Kelas <?> 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 ("token"); if (! stringutils.isempty (token)) {return true; } response.sendredirect ("/login/index"); mengembalikan false; } @Override public void posthandle (httpservletRequest httpservletrequest, httpservletresponse httpservletResponse, objek o, model dan model model dan lemparan {} @override void public aftercompletion (httpservonSresspresspspspspspspspspspspspspspspspresse htpespresspresse htpespresspresseSpsPSPSPSSPSPSPSPES httpservletResponse, objek o, pengecualian e) melempar pengecualian {}}Kemudian daftarkan Interceptor izin
Paket org.elvin.boot.interceptor; impor org.springframework.context.annotation.configuration; impor org.springframework.web.servlet.config.annotation.Interceptorregistry; Impor org.springFramework.web.servlet.config.annotation; kelas registerInceptor memperluas webmvccconfigurerAdapter {@Override public void addInterceptors (interceptorregistry registry) {registry.addInterceptor (new LoginInterCeptor ()); Super.AddInterceptors (Registry); }}Tambahkan pengontrol login ke pengontrol, berikan halaman login dan metode logout
Paket org.elvin.boot.controller; impor org.elvin.boot.annotation.nologin; impor org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.controller; impor org.springfram. org.springframework.web.bind.annotation.postmapping; impor org.springframework.web.bind.annotation.requestmapping; impor org.springframework.web.bind.annotation.responsody; impor javax.servlet.htp.htp.hpservebody; Impor javax.servlet.htp.htponstor; javax.servlet.http.httpservletResponse; import javax.servlet.http.httpsession;@nologin@controller@requestMapping ("login") permintaan kelas publik {@Autowired private httpserverRequest; @Autowired Private HTTPServletResponse Response; private string controllerPath = "login/"; // @nologin @getmapping ("index") public string index () {httpsession session = request.getSession (); session.setAttribute ("token", "token"); return controllerPath + "index"; } // @nologin @postmapping ("checkout") @ResponseBody public String checkout () {httpsession session = request.getSession (); session.setAttribute ("token", null); Kembalikan "OK"; }}Di sini saya telah membuat anotasi bebas login, yang dapat ditambahkan ke pengontrol atau tindakan.
Paket org.elvin.boot.annotation; import java.lang.annotation.elementType; import java.lang.annotation.retention; import java.lang.annotation.retentionPolicy; import java.lang.annotation.target; @target ({{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{, ElementType.method}) @retensi (retentionpolicy.runtime) public @interface nologin {}Tidak diperlukan konten dalam anotasi.
Halaman login (halaman login di sini hanya untuk logout, jadi setelah mengunjungi halaman ini, itu berarti login berhasil).
<!DOCTYPE html><html xmlns:th="http://www.thymeleaf.org"><head> <meta charset="UTF-8"/> <title>Title</title></head><body><div> <input type="button" value="Logout" id="checkOut"/></div><script TH: src = "@{/js/jQuery-1.11.1.js}"> </script> <skrip th: inline = "javascript"> $ (function () {$ (". Container"). Delegate ("#checkout", "klik", fungsi () {$ .aJax ({uRl: [@@{@{@@{@{{{{{{{{), {}, Success: function (res) {if (res == "OK") {alert ("Logout berhasil"); }); </script> </body> </html>Metode Demonstrasi Hasil:
Di browser, pertama buka halaman http: // localhost: 8080/login/indeks, dan kemudian akses http: // localhost: 8080/halaman pertama/indeks di tab baru.
Anda akan menemukan bahwa saat mengakses First/Index, Anda dapat mengaksesnya.
Pada saat ini, di halaman Login/Indeks, klik tombol Logout, segarkan halaman pertama/indeks, dan Anda akan melompat ke halaman login secara langsung.
Contoh penjelasan di atas string boot dan pencegat khusus adalah semua konten yang saya bagikan dengan Anda. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.