1. Trang chủ
  2. » Tất cả

Bảo mật mạng máy tính và hệ thống nghiên cứu giải pháp đảm bảo an toàn cho restful api với spring boot trên cơ sở dữ liệu mongodb

29 35 7
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Bảo Mật Mạng Máy Tính Và Hệ Thống Nghiên Cứu Giải Pháp Đảm Bảo An Toàn Cho Restful Api Với Spring Boot Trên Cơ Sở Dữ Liệu Mongodb
Tác giả Hà Thị Thùy Trang, Phạm Lê Nhật Quang, Trần Bá Thiện
Người hướng dẫn ThS. Phạm Trọng Huynh
Trường học Trường Đại Học Tài Nguyên Và Môi Trường
Chuyên ngành Hệ Thống Thông Tin Và Viễn Thám
Thể loại Đồ án
Năm xuất bản 2022
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 29
Dung lượng 1,94 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Để phân biệt, ta cần nhớ rằng JDK là một gói các công cụ pháttriển phần mềm dựa trên Java, trong khi JRE là gói công cụ sử dụng để chạy Java code.. JRE có thể được sử dụng như một thành

Trang 1

BỘ TÀI NGUYÊN VÀ MÔI TRƯỜNG TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG

KHOA: HỆ THỐNG THÔNG TIN VÀ VIỄN THÁM



ĐỒ ÁN MÔN HỌC BẢO MẬT MẠNG MÁY TÍNH VÀ HỆ THỐNG NGHIÊN CỨU GIẢI PHÁP ĐẢM BẢO AN TOÀN CHO RESTFUL API VỚI SPRING BOOT TRÊN CƠ SỞ DỮ LIỆU MONGODB.

………

Giảng viên hướng dẫn: ThS Phạm Trọng Huynh

Sinh viên thực hiện: Hà Thị Thùy Trang

Phạm Lê Nhật Quang

Lớp: 08_DHCNPM

Khóa: 08

TP Hồ Chí Minh, tháng 10 năm 2022

Trang 2

BỘ TÀI NGUYÊN VÀ MÔI TRƯỜNG TRƯỜNG ĐẠI HỌC TÀI NGUYÊN VÀ MÔI TRƯỜNG

KHOA: HỆ THỐNG THÔNG TIN VÀ VIỄN THÁM



ĐỒ ÁN MÔN HỌC BẢO MẬT MẠNG MÁY TÍNH VÀ HỆ THỐNG NGHIÊN CỨU GIẢI PHÁP ĐẢM BẢO AN TOÀN CHO RESTFUL API VỚI SPRING BOOT TRÊN CƠ SỞ DỮ LIỆU MONGODB.

………

Giảng viên hướng dẫn: ThS Phạm Trọng Huynh

Sinh viên thực hiện: Hà Thị Thùy Trang

Phạm Lê Nhật Quang Trần Bá Thiện

Lớp: 08_DHCNPM

Khóa: 08

TP Hồ Chí Minh, tháng 10 năm 2022

Trang 3

MỞ ĐẦU

Trang 4

LỜI CẢM ƠN

Em xin chân thành cảm ơn thầy Phạm Trọng Huynh, Giảng viên môn bảo mật mạng máytính và hệ thống trường Đại học Tài nguyên và Môi trường Thành phố Hồ Chí Minh đãcung cấp cho tôi những kỹ năng cơ bản và kiến thức cần thiết để hoàn thành nhiệm vụ dự

án này

Tuy nhiên, trong quá trình làm đề tài, do kiến thức chuyên môn còn hạn chế của em, chắcchắn sẽ không tránh khỏi những thiếu sót trong việc nêu và đánh giá vấn đề Em rất mongđược sự đóng góp ý kiến, đánh giá của các thầy cô giáo bộ môn để khóa luận của emđược hoàn thiện hơn Chân thành cảm ơn!

Trang 5

NHẬN XÉT

ĐIỂM

Trang 7

Chương 1 Giới thiệu đồ án

1.1 Định nghĩa vấn đề

Ngày này hệ thống Internet ngày càng phát triển, phần mềm sử dụng hệ thống internet ngày càng nhiều Các phần mềm đa dạng dẫn đến có rất nhiều yêu cầu cần được đáp ứng Một số phần mềm đòi hỏi về lượng thông tin lớn, dữ liệu lớn… nhưng không thể lưu dữ liệu đó tại thiết bị sử dụng, một số loại yêu cầu được cập nhật realtime (theo thời gian thực) để đảm bảo sự đúng đắn của thông tin (chứng khoán, tiền tệ ), một số phần mềm đòi hỏi xử lý nhanh và mạnh, mà các thiết bị lại không thể thực hiện được

do cấu hình không đủ Thông thường, để sử dụng các dịch vụ đó thì người dùng cần dùng trình duyệt, truy cập website và thực hiện Nhưng người dùng chỉ có thể sử dụng các giao diện mà nhà cung cấp đã thiết kết sẵn tuy nhiên chúng không đáp ứng những mong muốn của người dùng Để giải quyết vấn đề trên chúng ta cần xây dựng một ứng dụng có các tính năng như các dịch vụ đó nhưng giao diện thân thiện hơn Vì vậy cần phải sử dụng những dịch vụ riêng biệt để tương tác với hệ thống cung cấp các dịch

vụ nói trên Một hệ thống như vậy được gọi là API.

1.2 Phạm vi của đồ án

1.3 Mục tiêu, sự cần thiết của đề tài, tại sao lại chọn đề tài này?

Trang 8

Chương 2 Tìm hiểu JDK 8, Gradle, Spring Boot, Spring data mongodb

2.1 JDK là gì?

Java Development Kit (JDK) là một trong ba gói công nghệ cốt lõi được sử dụng

trong lập trình Java, cùng với JVM (Máy ảo Java - Java Virtual Machine) và JRE (JavaRuntime Environment - Môi trường Java Runtime) Việc phân biệt giữa ba công nghệnày, cũng như hiểu được cách chúng kết nối với nhau là rất quan trọng

 JVM là thành phần Java nền tảng để chạy các chương trình

 JRE là phần on-disk của Java, phần tạo ra JVM

 JDK cho phép các developer tạo các chương trình Java, trong đó các chương trình

có thể được JVM và JRE xử lý và chạy

Các developer khi mới sử dụng Java thường dễ nhầm lẫn Java Development Kit với JavaRuntime Environment Để phân biệt, ta cần nhớ rằng JDK là một gói các công cụ pháttriển phần mềm dựa trên Java, trong khi JRE là gói công cụ sử dụng để chạy Java code

JRE có thể được sử dụng như một thành phần độc lập để chạy các chương trình Java, dùvậy, JRE vẫn là một phần của JDK JDK đòi hỏi bộ công cụ JRE vì chạy các chươngtrình Java là một phần của việc phát triển chúng

Chia sẻ JDK theo 2 cách như sau:

Định nghĩa chuyên ngành: JDK là một hệ tiêu chuẩn trong việc triển khai nền tảng Java,

bao gồm các trình thông dịch dịch và thư viện lớp

Định nghĩa thông thường: JDK là gói phần mềm bạn tải xuống để tạo các ứng dụng dựa

trên Java

2.2 IDK 8

Java Development Kit 8 (JDK – Bộ công cụ cho người phát triển ứng dụng bằng ngônngữ lập trình Java) là một tập hợp những công cụ phần mềm được phát triển bởi Sun

Trang 9

Microsystems dành cho các nhà phát triển phần mềm, dùng để viết những applet Java haynhững ứng dụng Java – bộ công cụ này được phát hành miễn phí gồm có trình biên dịch,trình thông dịch, trình giúp sửa lỗi (debugger, trình chạy applet và tài liệu nghiên cứu).

Kể từ khi ngôn ngữ Java ra đời, JDK là bộ phát triển phần mềm thông dụng nhất choJava Ngày 17 tháng 11 năm 2006, hãng Sun tuyên bố JDK sẽ được phát hành dưới giấyphép GNU General Public License (GPL), JDK trở thành phần mềm tự do Việc này đãđược thực hiện phần lớn ngày 8 tháng 5 năm 2007 và mã nguồn được đóng góp choOpenJDK

Java Development Kit 8 là một bộ bao gồm các công cụ cần thiết trong quá trình pháttriển các ứng dụng Java + JRE Các công cụ đó là: javac.exe, java.exe, applet viewer,…vai trò của từng công cụ như sau:

 Javac.exe – giúp biên dịch các file nguồn viết bằng ngôn ngữ Java (*.java) thành

mã máy (byte code)

 Java.exe – gọi tới JRE, tải nạp các file mã máy đã được biên dịch và gọi tớimethod main để thực thi các mã đó

 Applet Viewer – để chạy các ứng dụng viết bằng applet

Như vậy JDK cung cấp tới bạn bộ công cụ trọn gói để phát triển các ứng dụng Java baogồm: phát triển (kết quả là các file java) –> biên dịch (kết quả là các file class) –> thựcthi ứng dụng

Yêu cầu phần mềm / Cấu hình:

Windows XP/Vista/7/8

Trang 10

2.3 Giới thiệu Gradle

Trong quá trình phát triển phần mềm, việc tự động hóa quá trình build và quản lý các thưviện rất quan trọng, nhằm tối ưu hóa công đoạn biên dịch, đóng gói; thuận tiện hơn choviệc phát triển phần mềm, cũng như maven và gradle cũng là một trong những công cụ đó

 Năm 2000, Apache Ant ra đời như là một trong những tool đóng gói hiện đại vànhanh chóng được sử dụng trong các dự án sử dụng ngôn ngữ Java Ant cho phépnhà phát triển mô tả meta-data của dự án cũng như các hoạt động trong quá trìnhbuild thông qua bộ cú pháp XML Tuy nhiên những đoạn mã viết theo tiêu chuẩncủa Ant quá dài và phức tạp

 Năm 2004, Apache Maven ra đời và đưa ra các cải thiện so với Ant Bằng việcđưa ra một cấu trúc dự án tiêu chuẩn, Maven cho phép nhà phát triển sử dụng mộttrong các plugin của mình thay vì phải viết toàn bộ các dòng code mô tả quá trìnhđóng gói Ngoài ra Maven còn cho phép tải về các thư viện phụ thuộc thông quainternet, điều này giúp cho việc chia sẻ cũng như quản lý phiên bản trở nên dễdàng hơn Đổi lại, nhà phát triển sẽ mất khá nhiều công sức để tùy chỉnh nếu cấutrúc dự án hiện tại không tuân theo Maven Standard Directory Layout Và việc vẫn

sử dụng XML làm cho file POM (Project Object Model) trở nên dài dòng và phứctạp để nắm bắt logic

 Gradle kết hợp các ưu điểm của Ant và Maven đồng thời thêm vào các cải thiệnmới và sử dụng Groovy trong việc giải quyết bài toán đóng gói

2.4 Các ưu điểm của gradle

 Gradle kết hợp các ưu điểm của Ant và Maven đồng thời đem lại các cải thiện mớithông qua việc sử dụng Groovy (một trong những ngôn ngữ JVM) trong việc giảiquyết bài toán đóng gói Nhờ vậy build script viết bằng Gradle trở nên ngắn gọn

và trực quan dễ đọc hơn

Trang 11

 Ngoài việc sử dụng Groovy làm DSL, Gradle cũng chú ý hỗ trợ thêm snhiều tínhnăng khác để cải thiện quá trình đóng gói cũng như tăng năng suất cho nhà pháttriển Đối với các dự án lớn, việc có nhiều module bên trong phụ thuộc lẫn nhau làhết sức phổ biến Khi sử dụng Maven, quá trình build diễn ra lâu do quá trìnhclean toàn bộ các artifact và sau đó là quá trình đóng gói lại từ đầu, đồng thời thờigian chạy các đoạn Unit Test cũng tiêu tốn khá nhiều thời gian Đối với Gradle, domột task build (một đơn vị logic của một quá trình build) đều được định nghĩainput và output, nên khi có sự thay đổi nhỏ trong source code, Gradle sẽ chỉ thựchiện build lại một phần cần thiết Đặc biệt, Gradle sẽ tự tìm kiếm các task khác lệthuộc task này và thực hiện quá trình build lại Như vậy, tốc độ build của Gradle

sẽ được rút ngắn Hơn thế nữa, Gradle cho phép chạy parallel các đoạn code testnhờ đó rút ngắn thời gian của quá trình build Trong tương lai, Gradle cho phépthực hiện việc phân phối các đoạn code test qua nhiều machine khác nhau để giảmthiểu thời gian chờ đợi Đồng thời điểm khác biệt lớn so với Maven là thay vìdừng quá trình build ngay khi gặp lỗi, Gradle sẽ thực thi hết tất cả các task có thể

và tổng hợp toàn bộ các lỗi gặp phải trong một lần đóng gói Nhà phát triển sẽkhông phải chờ đợi quá lâu để build và gặp lỗi, sửa lỗi và build lại

2.4.1 Build cho nhiều ngôn ngữ.

 Gradle hỗ trợ build cho nhiều ngôn ngữ lập trình khác nhau bao gồm Java, Scala,Python, C/C++, Android, iOS

 Được thiết kế để chạy trên JVM, Gradle hỗ trợ mạnh mẽ cho các dự án viết bằngJava và các ngôn ngữ JVM khác như Scala, Groovy, với việc hỗ trợ nhiều loạiứng dụng và công cụ phát triển thiết yếu như test frameworks (JUnit, TestNG,Spock), application frameworks (Java EE, Grails, Play!), embedded web servers(Jetty) and code analysis cops (Checkstyle, CodeNarc, FindBugs, JDepend, PMD,JaCoCo, Sonar)

Trang 12

 Tích hợp với Android Studio hỗ trợ quản lý dependency, multi-project Đồng thờitích hợp các test services phổ biến như AppThwack, TestDroid và Manymo Ngoài

ra, có thể tạo nhiều APK từ 1 module và upload chúng lên Google Play và các appstore khác với các phiên bản khác nhau (free, paid, )

 Hỗ trợ compiler, assembler và linker; cho phép phân phối các thư viện, file thựcthi với nhiều loại (debug, release), platforms (x86, x86_64), phiên bản(community, enterprise) khác nhau Tích hợp GCC, CLANG, XCODE, VISUALC++ …

 Tích hợp công cụ: Từ các IDE (Integrated Development Environment) đến các CI(Continuous Integration) hay các công cụ deploy, Gradle tích hợp với tất cả mọithứ mà bạn có thể nghĩ đến tham khảo: https://gradle.org/why/integrates-with-everything/

Trang 13

exclude group: 'org.hamcrest'

2.4.3 Giải pháp dependency tối ưu

 Không bao giờ tải 1 artifact nhiều lần

 Cache

 Xác minh qua checksum

 Track nguồn gốc dependency đảm bảo tính hợp lệ và ngăn chặn lỗi

2.5 So sánh với maven

2.5.1 Maven:

 quá trình build diễn ra lâu do quá trình clean toàn bộ các artifact và sau đó là quátrình đóng gói lại từ đầu

 các đoạn Unit Test cũng tiêu tốn khá nhiều thời gian

 dừng quá trình build ngay khi gặp lỗi

Trang 14

2.7 Tạo và triển khai CRUD trong project Spring Boot

Ở thời điểm hiện tại Spring Boot có lẽ đang là framework nổi tiếng và được sử dụngnhiều bậc nhất trong phát triển các ứng dụng sử dụng ngôn ngữ Java Được xây dựng trênnền tảng Spring framework, nó có tất cả các tính năng của Spring cộng thêm những tiệních mà nó mang lại như giảm thiểu các bước cấu hình phức tạp, nhúng server container(Tomcat, Jetty hoặc Undertow) tự động vào ứng dụng giúp chúng ta có thể khởi chạy mộtứng dụng ngay lập tức, quản lý dependence thông minh,…

Trang 15

Tất cả điều này đã tạo nên một sức lôi cuốn vô cùng lớn đối với cộng đồng developer trênkhắp thế giới, các công ty cũng đang dần chuyển sang dùng Spring Boot cho các dự ántiếp theo Lựa chọn học Spring Boot ở thời điểm hiện tại là một quyết định đúng đắn vìthị trường việc làm của nó đang rất nhiều Không chỉ vậy, hiện tại có nhiều công ty cũngđang dần chuyển từ Spring qua Spring Boot cho các dự án cũ và các dự án mới sẽ dùnghẳn Spring Boot.

 Khởi tạo project spring boot

Để khởi tạo một project Spring Boot nhanh chóng các bạn có thể truy cập vào trangSpring Initializr và lựa chọn các thông số cấu hình cho dự án, cũng như các dependencycần thiết hoặc khởi tạo project maven với các dependency như sau:

Lưu ý: Nếu dùng Spring Initializr, các bạn có thể thêm các dependency này bằng cáchchọn “Add dependencies” ở tab “Dependencies”

Trang 16

Cấu trúc project Spring Boot

Trong một project Spring Boot thường sẽ có các layer chính:

 Domain: chứa các ánh xạ database – entity

 Repository: định nghĩa các DAO (Data access object) class dùng để làm việc vớidatabase

 Service: chứa các business logic class

 Controller: nhận request từ client

 Mapper: dùng để convert qua lại giữa entity và dto (không có cũng được)

 Exception Hanlder: xử lý các exception xảy ra trong quá trình thực thi yêu cầu củaclient

Trang 17

Dự án sau khi được hoàn thành sẽ có cấu trúc như thế này Bây giờ, chúng ta sẽ bắt đầu

đi từng phần một

 Domain layer

Đối với hầu hết các dự án, chúng ta thường bắt đầu với domain layer trước, sau khi đãphân tích thiết kế cơ sở dữ liệu xong, chúng ta sẽ đến bước định nghĩa các entity ánh xạcác table tương ứng dưới database

Trong bài viết này, chúng ta dùng H2 database, các bạn có thể linh hoạt sử dụng cácdatabase khác như SQL, MySQL, Mariadb tùy ý Vì sử dụng JPA và JPA provider bêndưới là Hibernate nên có thể dễ dàng chuyển đổi qua lại giữa các database mà code

Trang 18

không bị ảnh hưởng Trong khuôn khổ bài viết này, định nghĩa một User entity có thểlàm như sau:

Các entity class phải được chú thích với @Entity annotation, ngoài ra các annotationkhác của lombok được mình sử dụng để giảm thiểu việc triển khai các method getter,setter, constructor, …

 Repository Layer

Đây là layer chúng ta định nghĩa các DAO class dùng để thao tác với database Tuynhiên, trong phần này, chúng ta không cần phải triển khai các method cơ bản như làfindById (), findAll, save (), delete(), update() vì chúng đã được triển khai thông qua mộttầng abstraction được đặt ở trên JPA implementation Để sử dụng các tính năng cơ bảnnày, chúng ta chỉ cần khai báo một Repository class thừa kế từ CrudRepository

 Service Layer

Trang 19

Như đã đề cập trước đó, Service layer sẽ là nơi chứa các business chính của dự án, là cầunối giữa Controller layer và Repository layer Với một ứng dụng CRUD thì chúng ta cần

ít nhất các method dùng cho việc thêm, sửa, xóa, cập nhật và tìm kiếm Trước tiên, chúng

ta cần định nghĩa một UserService Interface và một UserServiceImpl class dùng để triểnkhai các method định nghĩa trong UserService

Các bạn thấy cách làm này có “kỳ cục” không? Tại sao chúng ta không tạo luônUserService class rồi triển khai code trong đó? Điều này hoàn toàn được, tuy nhiên cácbạn cần phải biết đây là một cách làm giúp tăng tính mở rộng code

Giả sử, hiện tại chúng ta đang có UserService và UserServiceImpl hoạt động ổn Về saunày, chúng ta cần chỉnh sửa một số tính năng trong UserServiceImpl để tăng performancehoặc adapt cho phù hợp với business mới Nhưng do UserServiceImpl đã được phát triểnqua một thời gian dài, nên việc sửa code trong này rất khó khăn, lúc đó, chúng ta có thểtạo ra một UserServiceImplNew mới cũng như implement UserService và triển khai codetách bạch khỏi UserServiceImpl Sau đó, chúng ta chỉ cần thay đổi việc sử dụngUserServiceImplNew thay vì UserServiceImpl mà không cần chỉnh sửa code ở nhữngchỗ khác

Trang 20

Những chỗ khác đang sử dụng UserServiceImpl mà không có nhu cầu chỉnh sửa thì vẫn

có thể sử dụng, do không có chỉnh sửa gì trên UserServiceImpl nên chúng ta yên tâm làcác tính năng sẽ vẫn hoạt động như cũ

Trang 21

Với hàm update(), client cần truyền cho chúng ta ID của user muốn cập nhật và một Userobject chứa các thông tin được cập nhật.

Ngày đăng: 04/04/2023, 05:25

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w