Analisis kod sumber pemintas SpringBoot
May 15, 2023 pm 12:28 PM1. Apakah pemintas?
Pemintas dalam Java ialah objek yang memintas secara dinamik panggilan Tindakan. , juga boleh menghalang pelaksanaan Tindakan sebelum ia dilaksanakan, dan juga menyediakan cara untuk mengekstrak bahagian kod yang boleh digunakan semula dalam Tindakan. Dalam AOP, pemintas digunakan untuk memintas kaedah atau medan sebelum ia diakses, dan kemudian menambah operasi tertentu sebelum atau selepas.
Tindakan di atas secara amnya merujuk kepada antara muka lapisan Pengawal kami.
2. Pemintas tersuai
Secara umumnya, menyesuaikan pemintas terbahagi kepada tiga langkah
(1) Tulis pemintas untuk melaksanakan antara muka HandlerInterceptor.
(2) Pemintas didaftarkan di dalam bekas.
(3) Konfigurasikan peraturan pemintasan.
2.1 Menulis pemintas
Kami mencipta projek SpringBoot baharu, dan kemudian menyesuaikan pemintas LoginInterceptor untuk memintas permintaan tertentu dalam keadaan tidak dilog. Bermula dari JDK 1.8, kaedah antara muka dengan kata kunci lalai boleh mempunyai pelaksanaan lalai, jadi untuk melaksanakan antara muka anda hanya perlu melaksanakan kaedah tanpa kata kunci ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
|
2.2 Mendaftar dan mengkonfigurasi pemintas
Dalam SpringBoot, apabila kita perlu menyesuaikan konfigurasi, kita hanya perlu melaksanakan kelas WebMvcConfigurer dan mengatasi kaedah yang sepadan. Di sini kita perlu mengkonfigurasi pemintas, jadi tulis semula kaedah addInterceptorsnya.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Perhatikan bahawa jika kita mengkonfigurasi untuk memintas semua laluan, kita mesti mengecualikan sumber statik, jika tidak, gaya imej akan dipintas.
Melalui langkah di atas, kami telah menambah pemintas pada sistem. Hanya mulakan pengesahan.
3. Prinsip pemintas
Kami menggunakan penyahpepijatan titik putus untuk melihat cara permintaan penyemak imbas diproses ke bahagian belakang. Letakkan titik putus dalam kaedah doDispatch DispatcherServlet Ini ialah titik masuk permintaan Selepas penyemak imbas menghantar permintaan, ia dimajukan dan diproses dengan kaedah ini.
Mulakan aplikasi dalam mod nyahpepijat, akses mana-mana antara muka dan jejaki aliran kod
3.1 Cari pengendali yang boleh mengendalikan permintaan dan semua pemintas daripada pengendali
Di sini kami menemui HandlerExecutionChain dan rantai pemintas Terdapat tiga pemintas di dalamnya, LoginInterceptor
tersuai kami dan dua pemintas lalai sistem.
3.2 Laksanakan kaedah praHandle pemintas
Dalam kaedah doDispatch, terdapat dua baris kod berikut
1 2 3 4 5 6 7 |
|
Mari masukkan kaedah applyPreHandle untuk melihat logik kaedah ini
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
Menerusi kod di atas, kita tahu bahawa jika kaedah praHandle pemintas semasa kembali benar, kaedah praHandle pemintas seterusnya akan terus dilaksanakan, jika tidak kaedah afterCompletion pemintas akan dilaksanakan.
Kemudian mari kita lihat logik kaedah triggerAfterCompletion.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Melalui kod di atas, kita tahu bahawa kaedah afterCompletion pemintas dilaksanakan secara terbalik.
3.3 Laksanakan kaedah sasaran
Jika semua kaedah praHandle pemintas di atas kembali benar, maka tidak akan ada pulangan langsung dalam kaedah doDispatch, tetapi kaedah sasaran akan terus dilaksanakan. Jika kaedah preHandle mana-mana pemintas mengembalikan palsu, maka selepas melaksanakan kaedah afterCompletion pemintas (pemintas yang telah melaksanakan kaedah preHandle), kaedah doDispatch akan kembali terus dan kaedah sasaran tidak akan dilaksanakan.
Laksanakan kaedah sasaran melalui kod berikut
1 2 |
|
Saya tidak akan melihat pelaksanaan dalaman tertentu, tetapi melihat logik selepas pelaksanaan.
3.4 Laksanakan kaedah postHandle pemintas
Selepas kaedah sasaran dilaksanakan, kod turun
1 |
|
Lihat logik applyPostHandle
rreeeLaksanakan pemintas dalam susunan terbalik Kaedah postHandle pemintas
3.5 Laksanakan kaedah selepasPenyelesaian pemintas
Teruskan turun
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Masukkan kaedah ini, yang akan memproses hasil pelaksanaan dan jadikan halaman Kaedah ini Pada akhirnya, laksanakan kod berikut
3.6 Pengendalian pengecualian
Jika pengecualian dilemparkan semasa pelaksanaan kaedah doDispatch, ia akan dicetuskan dalam modul tangkapan Jalankan kaedah selepasPenyelesaian
Atas ialah kandungan terperinci Analisis kod sumber pemintas SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Artikel Panas

Alat panas Tag

Artikel Panas

Tag artikel panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana Springboot menyepadukan Jasypt untuk melaksanakan penyulitan fail konfigurasi

Cara menggunakan Redis untuk melaksanakan kunci teragih dalam SpringBoot

Bagaimana SpringBoot menyepadukan Redisson untuk melaksanakan baris gilir kelewatan

Bagaimana untuk menyelesaikan masalah bahawa springboot tidak boleh mengakses fail selepas membacanya ke dalam pakej balang

Analisis perbandingan dan perbezaan antara SpringBoot dan SpringMVC

Bagaimana SpringBoot menyesuaikan Redis untuk melaksanakan penyirian cache

Bagaimana untuk mendapatkan nilai dalam application.yml dalam springboot

Bagaimana untuk melaksanakan Springboot+Mybatis-plus tanpa menggunakan pernyataan SQL untuk menambah berbilang jadual
