جاوا و تکنولوژی های آن

java programming language

در این وبلاگ به بررسی نکات موجود در جاوا و تکنولوژی های آن می پردازیم

طبقه بندی موضوعی


اعتبار سنجی مقادیر ورودی که از کاربر میگیریم همیشه نیاز دارند که مورد اعتبار سنجی  قرار بگیرند چون میخواهیم همواره دیتایی از کاربر دریافت و یا ذخیره کنیم که مورد انتظار ما است و همینطور از نفوذ فعالیت های مخرب تا حدی جلوگیری شود


برای شروع وابستگی های مورد نیاز را به pom اضافه میکنیم :
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>4.3.7.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.4.0.Final</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.7</version>
</dependency>


در Spring MVC طبق استاندارد JSR349 از اعتبار سنجی سمت سرور پشتیبانی میکند که بصورت annotation تعریف شده اند


استفاده از Annotation های Validation در یک کلاس Data Model :

public class User {
 
    @NotNull
    @Email
    private String email;
 
    @NotNull
    @Size(min = 4, max = 15)
    private String password;
 
    @NotBlank
    private String name;
 
    @Min(18)
    @Digits(integer = 2, fraction = 0)
    private int age;
 
    // standard constructor, getters, setters
}


annotation های بالا جز JSR349 هستند به جز Email@ و NotBlank@ که از کتابخانه Hibernate-Validator استفاده شده است 







فرض کنید کلاس Controller ای داریم که درخواست های user/ را رسیدگی میکند و وظیفه آن گرفتن اطلاعات کاربر و ساختن یک ابجکت User جدید در یک List است

برای اینکه ابجکت ورودی معتبر باشد از Valid@ استفاده میکنیم که داخل کلاس User روی تک تک فیلد ها سیاست های اعتبار سنجی را ست کرده ایم و اگر اعتبار سنجی مشکلی داشت از طریق ابجکت BindingResult و متد ()hasError میتوانیم مطلع شویم :


@PostMapping(value = "/user")
@ResponseBody
public ResponseEntity<Object> saveUser(@Valid User user, BindingResult result, Model model) {
    if (result.hasErrors()) {
        List<String> errors = result.getAllErrors().stream()
          .map(DefaultMessageSourceResolvable::getDefaultMessage)
          .collect(Collectors.toList());
        return new ResponseEntity<>(errors, HttpStatus.OK);
    } else {
        if (users.stream().anyMatch(it -> user.getEmail().equals(it.getEmail()))) {
            return new ResponseEntity<>(
              Collections.singletonList("Email already exists!"), 
              HttpStatus.CONFLICT);
        } else {
            users.add(user);
            return new ResponseEntity<>(HttpStatus.CREATED);
        }
    }
}


با اینکه اعتبار سنجی سمت کلاینت میتواند توسط کاربران خرابکار دور زده شود ولی اغلب کاربران بدنبال اهداف خرابکارانه نیستند و داشتن اعتبار سنجی سمت کلاینت میتواند تجربه کاربری بهتری را ارائه دهد ولی در هر صورت کاملا غیر اصولی است که اعتبار سنجی سمت سرور نداشته باشیم 


فریم ورک هایی نظیر Angular قابلیت های خوبی برای اعتبار سنجی دارند که میتوانیم استفاده کنیم که میتوانید جهت اطلاعات بیشتر آنها را مطالعه فرمایید 




نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی