Sebagian besar verifikasi data permintaan HTTP dalam sistem B/S dilakukan di sisi klien, yang juga untuk pertimbangan kesederhanaan dan pengalaman pengguna, tetapi verifikasi sisi server sangat diperlukan dalam beberapa sistem dengan persyaratan keamanan tinggi.
Spring3 mendukung kerangka kerja verifikasi JSR-303. JSR-303 adalah sub-spec di Java EE 6 yang disebut beanvalidation. Implementasi referensi resmi adalah Hibernate Validator (tidak ada hubungannya dengan Hibernate ORM). JSR 303 digunakan untuk memverifikasi nilai -nilai bidang dalam biji java.
Validator terutama memeriksa rasionalitas data yang dikirimkan oleh pengguna, seperti apakah itu kosong, apakah panjang kata sandi lebih besar dari 6 digit, apakah itu murni digital, dll. Jadi bagaimana Anda bisa menggunakan kerangka kerja verifikasi yang kuat di Spring Boot?
Dikombinasikan dengan validasi dan springboot
1. Tambahkan tag ke bean
Bagian dari kode:
Tag perlu ditambahkan ke atribut, @notblank makna tag dijelaskan di akhir artikel
Pengguna kelas publik {private integer ID; @Notblank (message = "{user.name.notblank}") nama string pribadi; nama pengguna string pribadi;2. Nyalakan verifikasi di pengontrol
Tambahkan tag @Validated ke parameter permintaan di Controller untuk mengaktifkan verifikasi
@RequestMapping (method = requestMethod.post) Pengguna publik Buat (@RequestBody @Validated User pengguna) {return userservice.create (pengguna); }3. Buat file konfigurasi pesan kesalahan baru di bawah sumber daya
Buat file konfigurasi pesan prompt baru "ValidationMessages.Properties" di Direktori Resource
Catatan: Nama harus "ValidationMessages.Properties" karena Springboot secara otomatis membaca pesan kesalahan di ValidationMessages.Properties di ClassPath.
File validationMessages.properties dikodekan sebagai ASCII. Jenis data adalah nilai kunci. Kunci "user.name.notblank" adalah nilai pesan yang sesuai dalam kawat gigi kacang langkah pertama.
Nilai adalah pesan yang cepat, tetapi ASCII. (Kontennya adalah "Nama tidak bisa kosong")
4. Sesuaikan penangan pengecualian untuk menangkap pesan kesalahan
Ketika verifikasi gagal, pengecualian akan dilemparkan. Pesan Pengecualian adalah informasi prompt yang dikonfigurasi di ValidationMessages.Properties. Penangan pengecualian didefinisikan di sini. Tangkap informasi pengecualian (karena mungkin ada beberapa item yang gagal melewati verifikasi, mereka ditangkap dan diproses secara seragam) dan melemparkannya ke ujung depan. (Ini adalah pengirim terpisah ujung depan dan belakang)
public void MethodArgumentNotValidexception (Exception EX, permintaan httpservletRequest, respons httpservletResponse) {logger.error (":" + commonutil.getHttpClientInfo (request), ex); MethodArgumentNotValidexception c = (MethodArgumentNotValidexception) ex; Daftar <bjesterror> kesalahan = c.getBindingResult (). GetAllErrors (); StringBuffer errorMsg = new StringBuffer (); errors.stream (). foreach (x -> errorrormsg.append (x.getDefaultMessage ()). append (";")); poupleateExceptionResponse (respons, httpstatus.internal_server_error, errormsg.tostring ()); } private void poupleateExceptionResponse (httpservletResponse response, httpstatus errorCode, string errormessage) {coba {response.senderror (errorCode.value (), errormessage); } catch (ioException e) {logger.error ("Gagal mengisi kesalahan respons", e); }}5. Lampirkan beberapa makna tag
| membatasi | menjelaskan |
|---|---|
| @Batal | Batasi hanya untuk NULL |
| @Notnull | Batasnya tidak boleh nol |
| @AssertFalse | Batasnya harus salah |
| @Asserttrue | Batasnya harus benar |
| @Decimalmax (nilai) | Batasnya harus menjadi angka yang tidak lebih besar dari nilai yang ditentukan. |
| @Decimalmin (nilai) | Batasnya harus menjadi angka yang tidak kurang dari nilai yang ditentukan |
| @Digits (integer, fraksi) | Batasnya harus desimal, dan jumlah digit di bagian integer tidak dapat melebihi integer, dan jumlah digit dalam bagian fraksi tidak dapat melebihi fraksi |
| @Masa depan | Batasnya harus menjadi tanggal mendatang |
| @Max (nilai) | Batasnya harus menjadi angka yang tidak lebih besar dari nilai yang ditentukan. |
| @Min (nilai) | Batasnya harus menjadi angka yang tidak kurang dari nilai yang ditentukan |
| @Masa lalu | Batasnya haruslah tanggal masa lalu |
| @Pattern (nilai) | Pembatasan harus mematuhi ekspresi reguler yang ditentukan |
| @Size (maks, min) | Batasi panjang karakter harus antara min dan maks |
| @Masa lalu | Verifikasi bahwa nilai elemen (tipe tanggal) anotasi lebih awal dari waktu saat ini |
| @NotEempty | Verifikasi bahwa nilai elemen dari anotasi verifikasi tidak nol dan tidak kosong (panjang string bukan 0, ukuran pengumpulan bukan 0) |
| @Notblank | Verifikasi bahwa nilai elemen anotasi tidak kosong (bukan nol, panjangnya 0 setelah menghapus ruang pertama). Tidak seperti @NotEmpty, @notblank hanya diterapkan pada string dan akan menghapus ruang string saat membandingkan. |
| Pastikan nilai elemen dari anotasi adalah email, dan Anda juga dapat menentukan format email khusus melalui ekspresi dan bendera reguler. |
Contoh
@Pattern (regexp = "^[a-za-z0-9]+$", message = "{Account.UserName.Space}") @size (min = 3, maks = 20, pesan = "{Account.UserName.Size}")Contoh 2
Di sini kami terutama menggunakan anotasi untuk belajar. Mari kita bicara tentang kebutuhan kita terlebih dahulu:
Kami memiliki demo.html, di halaman, ada dua kotak input nama elemen, pustaka input kata sandi, dan tombol kirim.
Setelah mengirimkan ke latar belakang, gunakan validator untuk verifikasi, dan kemudian meneruskan ke demo.html jika ada kesalahan,
Kami pertama -tama menulis kelas entitas untuk menerima input pengguna dan menggunakan anotasi validator untuk memverifikasi:
paket com.kfit.demo; impor org.hibernate.validator.constraints.length; impor org.hibernate.validator.constraints.notempty; Demo Kelas Publik {Private Long ID; @NoTEMPTY (pesan = "Nama tidak bisa kosong") nama string pribadi; @NoTEMPTY (pesan = "Kata sandi tidak bisa kosong") @length (min = 6, pesan = "Panjang kata sandi tidak bisa kurang dari 6 digit") kata sandi string pribadi; publiclong getId () {return id; } publicVoid setId (longId) {this.id = id; } public string getName () {return name; } public void setName (name string) {this.name = name; } public string getPassword () {return kata sandi; } public void setPassword (kata sandi string) {this.password = kata sandi; } @Override public string toString () {return "demo [id =" + id + ", name =" + name + ", password =" + password + "]"; }}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.