Kata pengantar:
Mengenai pengenalan Kaptcha dan integrasi Spring Kaptcha, saya telah menjelaskan secara rinci dalam artikel lain. Silakan merujuk ke: Kode Verifikasi Kaptcha Spring.
Artikel ini akan memperkenalkan dua cara mengintegrasikan Springboot ke dalam Kaptcha.
Alat Pengembangan dan Teknologi:
1. Ide 2017
2. Springboot 2.0.2
3. Kaptcha
Mulai secara resmi:
Metode 1: Konfigurasikan melalui Kaptcha.xml
1. Buat inisialisasi musim semi baru menggunakan ide
2. Tambahkan dependensi Kaptcha:
<!-Kode verifikasi KAPTCHA-> <dependency> <GroupId> com.github.penggle </groupid> <ArTifactId> Kaptcha </artifactid> <version> 2.3.2 </version> </dependency>
3. Buat Kaptcha.xml baru di bawah sumber daya, dengan konten berikut:
Kaptcha.xml
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring--eans.xsd"> <! <constructor-arg type = "java.util.properties"> <!-Set Kaptcha Properties-> <sops> <prop key = "Kaptcha.border"> ya </prop> <prop key = "Kaptcha.border.color"> 105,179,90 </propp> <porcor/propch. " <prop key = "Kaptcha.image.width"> 100 </prop> <prop key = "Kaptcha.image.height"> 50 </prop> <prop key = "Kaptcha.image.height"> 50 </prop> <prop key = "Kaptcha.image.height"> 50 </fop> <prop> KEY = "KAPTCHA.Image.HEIGHT"> 50 </FORM> </fop> <por = " KEY = "KAPTCHA.Image.Height"> 50 </prop> <prop key = "Kaptcha. KEY =" KAPTCHA.TEXTPRODUCER.FONT.SIZE "> 27 </prop> <prop key =" Kaptcha.Session.key "> Code </sop> <prop KEY =" Kaptcha.textproduc.kaper. key = "Kaptcha.TextProducer.font.names"> Song Font, Kai Font, Microsoft Yahei </prop> <prop key = "Kaptcha.TextProducer.Char.String"> 0123456788AbceFgHiJKlMNOPQRSUVLSUVXYZ </propor/propghijklmnopqxyz </propgeJKlMNOPQRSUVWXYZ </propGCEFGHIJKLMNOPQSYZ </propg KEY = "KAPTCHA.OBSCURIFICATOR.IMPL"> com.google.code.kaptcha.impl.waterripple </prop> <prop key = "Kaptcha.noise.color"> </prop> <prop key = "Kaptcha.noise.impl"> com.google.code.code KEY = "KAPTCHA.Background.Clear.from"> 185,56,213 </prop> <prop key = "Kaptcha.background.clear.to"> white </prop> <prop> "Kaptcha.textproducer.char.space"> </prop> </propch> </konstruktor> </BEANG> </BEAN/BEAN </BEAN> </BEANT> </BEANT> </BEANT> </BEAN/BEAN </BEAN> </BEAN> </props> </propch>
CATATAN: Konten dalam Kaptcha.xml sebenarnya sama dengan konten di spring-krapha.xml saat Spring mengintegrasikan Kaptcha. Ini berarti menyerahkan Kaptcha ke manajemen kontainer pegas, mengatur beberapa properti, dan kemudian secara langsung menyuntikkan saat dibutuhkan.
4. Muat Kaptcha.xml:
Tambahkan @ImportResource(locations = {"classpath:kaptcha/kaptcha.xml"}), tambahkan anotasi ini, Springboot akan memuat file KAPTCHA.XML. Perhatikan bahwa jalur Kaptcha.xml tidak boleh ditulis secara tidak benar, Classpath adalah direktori sumber daya di sini.
5. Tulis pengontrol untuk menghasilkan kode verifikasi:
Codecontroller.java
@ControllerPublic kelas codecontroller {@Autowired produser pribadinya captchaproducer = null; @RequestMapping ("/Kaptcha") public void getKaptChaimage (permintaan httpservletRequest, httpservletResponse response) melempar pengecualian {httpsession session = request.getSession (); response.setDateheader ("kedaluwarsa", 0); response.setHeader ("cache-control", "no-store, no-cache, harus-revalidasi"); response.addheader ("cache-control", "post-check = 0, pre-check = 0"); response.setheader ("pragma", "no-cache"); response.setContentType ("Image/JPEG"); // menghasilkan kode verifikasi string captext = captchaproducer.createText (); session.setAttribute (constants.kaptcha_session_key, captext); // tulis bufferedImage ke klien bi = captchaproducer.createImage (captext); ServeLetoutputStream out = response.getoutputStream (); Imageo.write (bi, "jpg", out); coba {out.flush (); } akhirnya {out.close (); }}}CATATAN: Suntikkan kacang yang baru saja dikonfigurasi di Kaptcha.xml di jalur pengontrol ini, dan kemudian Anda dapat menggunakannya untuk menghasilkan kode verifikasi dan mengeluarkan kode verifikasi ke klien; Ingat rute kelas ini, SRC dari kode verifikasi halaman front-end perlu menunjuk ke rute ini.
6. Buat alat perbandingan kode verifikasi baru:
Codeutil.java
Kode Public Classutil { / ** * Konversi parameter front-end yang diperoleh ke string type * @param permintaan * @param Key * @return * / public static String getstring (httpservletRequest request, tombol string) {coba {string result = request.getParameter (key); if (result! = null) {result = result.trim (); } if ("". Equals (hasil)) {result = null; } hasil pengembalian; } catch (Exception e) {return null; }} /** * Verifikasi kode verifikasi * @param permintaan * @return * /public static boolean checkverifyCode (httpservletrequest request) {// Dapatkan string kode verifikasi yang dihasilkan verifyCodeExpected = (string) request.getSession (). GetAttribute (com.google.code.kapap. // Dapatkan kode verifikasi yang dimasukkan oleh string pengguna VerifyCodeActutual = codeutil.getString (permintaan, "verifyCodeActual"); if (verifyCodeActual == null ||! VerifikasiCodeActual.equals (verifyCodeExpected)) {return false; } return true; }}Catatan: Kelas ini digunakan untuk membandingkan kode verifikasi yang dihasilkan dengan kode verifikasi yang dimasukkan oleh pengguna. Kode verifikasi yang dihasilkan akan ditambahkan secara otomatis ke sesi, dan input pengguna akan diperoleh melalui getParameter. Perhatikan bahwa nilai kunci getParameter harus konsisten dengan nilai nama kode verifikasi di halaman.
7. Gunakan kode verifikasi:
①Controller
Helloworld.java
@RestControllerPublic Class HelloWorld {@RequestMapping ("/Hello") Public String Hello (permintaan httpservletRequest) {if (! Codeutil.CheckVerifyCode (request)) {return "Kode verifikasi salah!"; } else {return "Halo, World"; }}} ②Halaman
Hello.html
<! Doctype html> <html lang = "en"> <head> <meta charset = "utf-8"> <itement> title </iteme> <script type = "text/javascript"> function refresh () {document.geteLementById ('captcha_img'). Src = "/Kaptcha?" } </script> </head> <body> <Form Action = "/Hello" Method = "Post"> Kode verifikasi: <input type = "text" placeholder = "Harap masukkan kode verifikasi" name = "verifyCodeActutual"> <v> <mg id = "captcha_img" Onclick = "Refresh ()" src = "/Kaps/Kaps/incup" inklick = "refresh ()" src = "/"/Kaps/in -capba "inklick =" Refresh () "src ="/"/Kaps/in -kaptch" incup "inklick =" Refresh () "src ="/"/Kaps =" in -captch "inklick =" Refresh () "SRC ="/KAPCH "/KAPCPA" INDICT/ONCUCUT <) value = "Kirim"/> </form> </body> </html>Catatan: Kode verifikasi pada dasarnya adalah gambar, jadi gunakan tag <mmg>, dan kemudian gunakan src = "/kapcha" untuk menunjuk ke rute pengontrol yang menghasilkan kode verifikasi; Hubungi kode JS melalui OnClick = "Refresh ()" untuk mewujudkan fungsi klik-ke-switch; Perhatikan nilai nama dalam <input name = "VerifyCodeActual">, dan nilai kunci yang dilewati saat mendapatkan kode verifikasi yang dimasukkan oleh pengguna melalui metode permintaan getParameter () di Codeutil harus konsisten dengan nilai nama di sini.
8. Tes:
Masukkan kode verifikasi yang benar
Verifikasi berlalu
Masukkan kode verifikasi yang salah
Verifikasi gagal
Metode 2: Konfigurasikan Kaptcha Melalui Kelas Konfigurasi
1. Konfigurasikan Kaptcha
Dibandingkan dengan metode satu, satu meningkat dan dua penurunan.
mengurangi:
①Delete Kaptcha.xml ②Delete @ImportResource(locations = {"classpath:kaptcha/kaptcha.xml"}) Anotasi di kelas startup
meningkatkan:
① Buat kelas konfigurasi KaptChaconfig baru, kontennya adalah sebagai berikut:
Kaptchaconfig.java
@ConfigurationPublic kelas KaptChaconfig {@Bean DefaultKaptcha getDefaultKaptcha () {defaultKaptcha captchaproducer = new DefaultKaptChA (); Properti properti = properti baru (); properties.setProperty ("Kaptcha.border", "ya"); properties.setProperty ("Kaptcha.border.color", "105.179,90"); properties.setProperty ("Kaptcha.TextProducer.font.color", "Blue"); properties.setProperty ("Kaptcha.image.width", "110"); properties.setProperty ("Kaptcha.image.height", "40"); properties.setProperty ("Kaptcha.TextProducer.font.size", "30"); properties.setProperty ("Kaptcha.Session.key", "Code"); properties.setProperty ("Kaptcha.TextProducer.char.length", "4"); properties.setProperty ("Kaptcha.TextProducer.font.names", "Font Song, Kai Font, Microsoft Yahei"); Config config = config baru (properti); captchaproducer.setConfig (config); return captchaproducer; }}Catatan: Kelas ini digunakan untuk mengonfigurasi Kaptcha, yang setara dengan Kaptcha.xml dalam Metode 1. Tambahkan Kaptcha ke wadah IOC, kemudian kembali ke instance dengan properti yang ditetapkan, dan akhirnya menyuntikkannya ke Codecontroller. Anda dapat menggunakannya untuk menghasilkan kode verifikasi di codecontroller. Memberi perhatian khusus untuk mengembalikan captchaproducer; Nama captchaproducer di produsen swasta captchaproducer = null;, jika tidak, kacang tidak akan dimuat.
2. Tes:
Masukkan kode verifikasi yang benar:
Verifikasi berlalu
Masukkan kode verifikasi yang salah
Verifikasi gagal
Untuk menjelaskan bahwa kode verifikasi dari dua kali dihasilkan berdasarkan dua metode, kode verifikasi metode pertama dan kedua ditetapkan atribut yang berbeda. Dari gambar, kita dapat melihat bahwa warna, garis interferensi, latar belakang, dll. Dari kode verifikasi dua kali berbeda.
Meringkaskan:
1. Proses penyortiran:
Tidak peduli ke arah mana, Anda harus terlebih dahulu menambahkan Kaptcha ke wadah musim semi, yaitu, harus ada kacang Kaptcha; Kemudian buat pengontrol baru, dan suntikkan kacang Kaptcha ke dalam pengontrol untuk menghasilkan kode verifikasi; Lalu ada kelas alat yang membandingkan kode verifikasi, dan hubungi kelas alat di pengontrol tes untuk perbandingan kode verifikasi; Akhirnya, di halaman front-end, Anda hanya perlu menggunakan <img src = "/生成验证码的controller的路由"> untuk mendapatkan kode verifikasi. Dengan menambahkan acara klik ke tag IMG ini, Anda dapat mewujudkan "klik untuk beralih kode verifikasi".
2. Perbandingan dengan integrasi musim semi Kaptcha
Integrasi Musim Semi Kaptcha juga memperkenalkan dua metode. Konfigurasi adalah yang paling sederhana di web.xml, dan tidak perlu menulis pengontrol yang menghasilkan kode verifikasi. Di halaman, gunakan SRC untuk menunjuk ke nilai <RURL-pola> dari servlet Kaptcha di web.xml.
Kedua metode springboot mengintegrasikan KAPTCHA mirip dengan metode kedua Kaptcha mengintegrasikan KAPTCHA. Mereka digunakan untuk mengonfigurasi kacang terlebih dahulu, dan kemudian menggunakan pengontrol untuk menghasilkan kode verifikasi. Front-end menggunakan SRC untuk menunjuk ke pengontrol ini. Perbedaannya adalah bahwa jika pengontrol yang menghasilkan kode verifikasi adalah /xxx, maka src = "xxx.jpg" Ketika springboot mengintegrasikan KAPTCHA, src = "/xxx"。
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.