การตรวจสอบข้อมูลการร้องขอ HTTP ส่วนใหญ่ในระบบ B/S นั้นดำเนินการทางฝั่งไคลเอ็นต์ซึ่งใช้เพื่อการพิจารณาความง่ายและประสบการณ์ของผู้ใช้ แต่การตรวจสอบฝั่งเซิร์ฟเวอร์นั้นขาดไม่ได้ในบางระบบที่มีข้อกำหนดด้านความปลอดภัยสูง
Spring3 รองรับกรอบการตรวจสอบ JSR-303 JSR-303 เป็นสเปคย่อยใน Java EE 6 ที่เรียกว่า Beanvalidation การดำเนินการอ้างอิงอย่างเป็นทางการคือการตรวจสอบความถูกต้องของไฮเบอร์เนต (ไม่มีส่วนเกี่ยวข้องกับ Hibernate ORM) JSR 303 ใช้เพื่อตรวจสอบค่าของฟิลด์ในถั่วชวา
ตัวตรวจสอบความถูกต้องส่วนใหญ่ตรวจสอบความมีเหตุผลของข้อมูลที่ส่งโดยผู้ใช้เช่นว่ามันว่างเปล่าไม่ว่าจะเป็นความยาวของรหัสผ่านมากกว่า 6 หลักไม่ว่าจะเป็นดิจิตอลล้วนๆ ฯลฯ ดังนั้นคุณจะใช้กรอบการตรวจสอบที่ทรงพลังในฤดูใบไม้ผลิได้อย่างไร
รวมกับการตรวจสอบความถูกต้องและ springboot
1. เพิ่มแท็กลงในถั่ว
ส่วนหนึ่งของรหัส:
ต้องเพิ่มแท็กลงในแอตทริบิวต์ @NotBlank ความหมายของแท็กจะอธิบายได้ในตอนท้ายของบทความ
ผู้ใช้ระดับสาธารณะ {ID จำนวนเต็มส่วนตัว; @NotBlank (message = "{user.name.notblank}") ชื่อสตริงส่วนตัว; ชื่อผู้ใช้สตริงส่วนตัว;2. เปิดการตรวจสอบในคอนโทรลเลอร์
เพิ่มแท็ก @Validated ลงในพารามิเตอร์คำขอในคอนโทรลเลอร์เพื่อเปิดใช้งานการตรวจสอบ
@RequestMapping (method = requestMethod.post) ผู้ใช้สาธารณะสร้าง (@requestbody ผู้ใช้ @validated ผู้ใช้ผู้ใช้) {return userservice.create (ผู้ใช้); -3. สร้างไฟล์การกำหนดค่าข้อความแสดงข้อผิดพลาดใหม่ภายใต้ทรัพยากร
สร้างไฟล์การกำหนดค่าข้อความพรอมต์ใหม่ "ValidationMessages.properties" ในไดเรกทอรีทรัพยากร
หมายเหตุ: ชื่อจะต้องเป็น "ValidationMessages.properties" เนื่องจาก SpringBoot อ่านข้อความแสดงข้อผิดพลาดโดยอัตโนมัติใน ValidationMessages.properties ใน ClassPath
ไฟล์ ValidationMessages.properties ถูกเข้ารหัสเป็น ASCII ชนิดข้อมูลคือค่าคีย์ คีย์ "user.name.notblank" เป็นค่าข้อความที่สอดคล้องกันในการจัดฟันของถั่วขั้นตอนแรก
ค่าเป็นข้อความที่รวดเร็ว แต่เป็น ASCII (เนื้อหาคือ "ชื่อไม่สามารถว่างเปล่า")
4. ปรับแต่งตัวจัดการข้อยกเว้นเพื่อจับข้อความแสดงข้อผิดพลาด
เมื่อการตรวจสอบล้มเหลวข้อยกเว้นจะถูกโยนลงไป ข้อความข้อยกเว้นคือข้อมูลแจ้งที่กำหนดค่าใน ValidationMessages.properties ตัวจัดการข้อยกเว้นถูกกำหนดไว้ที่นี่ ข้อมูลข้อยกเว้นจับภาพ (เนื่องจากอาจมีหลายรายการที่ไม่ผ่านการตรวจสอบพวกเขาจะถูกจับและประมวลผลอย่างสม่ำเสมอ) และโยนมันไปที่ส่วนหน้า (นี่คือผู้ส่งด้านหน้าและด้านหลังแยก)
โมฆะสาธารณะ MethodArgumentNotValidexception (Exception Ex, คำขอ httpservletRequest, การตอบสนอง httpservletResponse) {logger.error (":" + Commonutil.gethttpClientinfo (คำขอ), อดีต); MethodArgumentNotValidexception C = (MethodArgumentNotValidexception) Ex; รายการ <ObjecTerror> ข้อผิดพลาด = c.getBindingResult (). getAllerRors (); StringBuffer errormsg = new StringBuffer (); Errors.stream (). foreach (x -> errormsg.append (x.getDefaultMessage ()). ผนวก (";")); pouplateExceptionResponse (การตอบสนอง, httpstatus.internal_server_error, errormsg.toString ()); } โมฆะส่วนตัว pouplateExceptionResponse (การตอบสนอง httpservletResponse, httpstatus errorcode, String errorMessage) {ลอง {response.senderror (errorcode.value (), errorMessage); } catch (ioexception e) {logger.error ("ล้มเหลวในการเติมข้อผิดพลาดในการตอบกลับ", e); -5. แนบความหมายแท็กบางส่วน
| จำกัด | อธิบาย |
|---|---|
| @โมฆะ | จำกัด เฉพาะ null |
| @notnull | ขีด จำกัด จะต้องไม่เป็นโมฆะ |
| @assertfalse | ขีด จำกัด จะต้องเป็นเท็จ |
| @AssertTrue | ขีด จำกัด จะต้องเป็นจริง |
| @DecimalMax (ค่า) | ขีด จำกัด จะต้องเป็นตัวเลขที่ไม่เกินค่าที่ระบุ |
| @decimalmin (ค่า) | ขีด จำกัด จะต้องเป็นตัวเลขไม่น้อยกว่าค่าที่ระบุ |
| @Digits (จำนวนเต็ม, เศษส่วน) | ขีด จำกัด จะต้องเป็นทศนิยมและจำนวนตัวเลขในส่วนจำนวนเต็มไม่เกินจำนวนเต็มและจำนวนตัวเลขในส่วนเศษ |
| @อนาคต | ขีด จำกัด จะต้องเป็นวันที่ในอนาคต |
| @max (ค่า) | ขีด จำกัด จะต้องเป็นตัวเลขที่ไม่เกินค่าที่ระบุ |
| @min (ค่า) | ขีด จำกัด จะต้องเป็นตัวเลขไม่น้อยกว่าค่าที่ระบุ |
| @อดีต | ขีด จำกัด จะต้องเป็นวันที่ผ่านมา |
| @Pattern (ค่า) | ข้อ จำกัด จะต้องสอดคล้องกับนิพจน์ทั่วไปที่ระบุ |
| @Size (สูงสุด, นาที) | ขีดจำกัดความยาวอักขระจะต้องอยู่ระหว่างขั้นต่ำและสูงสุด |
| @อดีต | ตรวจสอบว่าค่าองค์ประกอบ (ประเภทวันที่) ของคำอธิบายประกอบเร็วกว่าเวลาปัจจุบัน |
| @NotEmpty | ตรวจสอบว่าค่าองค์ประกอบของคำอธิบายประกอบการตรวจสอบไม่ใช่โมฆะและไม่ว่างเปล่า (ความยาวสตริงไม่ใช่ 0 ขนาดการรวบรวมไม่ใช่ 0) |
| @notblank | ตรวจสอบว่าค่าองค์ประกอบของคำอธิบายประกอบนั้นไม่ว่างเปล่า (ไม่ใช่โมฆะความยาวคือ 0 หลังจากลบพื้นที่แรก) ซึ่งแตกต่างจาก @NotEmpty, @NotBlank ใช้กับสตริงเท่านั้นและจะลบช่องว่างสตริงเมื่อเปรียบเทียบ |
| @อีเมล | ตรวจสอบว่าค่าองค์ประกอบของคำอธิบายประกอบคืออีเมลและคุณยังสามารถระบุรูปแบบอีเมลที่กำหนดเองผ่านนิพจน์และการตั้งค่าสถานะปกติ |
ตัวอย่าง
@pattern (regexp = "^[a-za-z0-9]+$", message = "{account.username.space}") @size (min = 3, max = 20, message = "{account.username.size}")ตัวอย่างที่ 2
ที่นี่เราใช้คำอธิบายประกอบเพื่อการเรียนรู้เป็นหลัก มาพูดถึงความต้องการของเราก่อน:
เรามี demo.html บนหน้าเว็บมีสองกล่องอินพุตชื่อองค์ประกอบไลบรารีอินพุตรหัสผ่านและปุ่มส่ง
หลังจากส่งไปยังพื้นหลังให้ใช้ตัวตรวจสอบเพื่อตรวจสอบแล้วส่งต่อไปยัง demo.html หากมีข้อผิดพลาด
ก่อนอื่นเราเขียนคลาสเอนทิตีเพื่อรับอินพุตของผู้ใช้และใช้คำอธิบายประกอบการตรวจสอบความถูกต้องเพื่อตรวจสอบ:
แพ็คเกจ com.kfit.demo; นำเข้า org.hibernate.validator.constraints.length; นำเข้า org.hibernate.validator.constraints.NotEmpty; การสาธิตชั้นเรียนสาธารณะ {ID ส่วนตัวยาว; @NotEmpty (message = "ชื่อไม่สามารถว่าง") ชื่อสตริงส่วนตัว; @NotEmpty (message = "รหัสผ่านไม่สามารถว่างเปล่า") @Length (min = 6, message = "ความยาวรหัสผ่านไม่น้อยกว่า 6 หลัก") รหัสผ่านส่วนตัว; Publiclong getId () {return id; } publicVoid setId (longid) {this.id = id; } สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } สตริงสาธารณะ getPassword () {ส่งคืนรหัสผ่าน; } โมฆะสาธารณะ setPassword (รหัสผ่านสตริง) {this.password = รหัสผ่าน; } @Override สตริงสาธารณะ toString () {return "demo [id =" + id + ", name =" + name + ", รหัสผ่าน =" + รหัสผ่าน + "]"; -ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น