Mẹo về Spring Security JWT là gì Chi Tiết
Họ tên bố (mẹ) đang tìm kiếm từ khóa Spring Security JWT là gì được Update vào lúc : 2022-04-02 02:16:06 . Với phương châm chia sẻ Thủ Thuật về trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi đọc nội dung bài viết vẫn ko hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Tác giả lý giải và hướng dẫn lại nha.
Trong bài hướng dẫn sử dụng JWT với Spring Boot, chúng tôi sẽ hướng dẫn những bạn cách xác thực (Authentication) và phân quyền (Authorization) sử dụng JSON Web Token (JWT).
Nội dung chính- Hướng dẫn sử dụng JWT với Spring Boot – Chuẩn bịHướng dẫn sử dụng JWT với Spring Boot – Các bước thực hiệnHướng dẫn sử dụng JWT với Spring Boot – Build, run và demoHướng dẫn sử dụng JWT với Spring Boot – Kết luậnVideo liên quan
Người dùng sau khi đăng ký tài khoản thành công, sẽ sử dụng tài khoản này để đăng nhập vào khối mạng lưới hệ thống. Đăng nhập thành công, khối mạng lưới hệ thống sẽ tạo một token tương ứng cho những người dân tiêu dùng đó.
Token này sẽ được sử dụng để nhận diện người tiêu dùng này với người tiêu dùng khác. Để làm rõ hơn cách JWT hoạt động và sinh hoạt giải trí, những bạn xem hình phía dưới
Đây là API tất cả chúng ta cần tạo trong bài hướng dẫn này
Phương thứcURLDiễn giảiPOST/api/auth/signupTạo mới tài khoảnPOST/api/auth/signinĐăng nhậpGET/api/test/allGet dữ liệuGET/api/test/userGet tài liệu với quyền UserGET/api/test/modGet dữu liệu với quyền ModeratorGET/api/test/adminGet tài liệu với quyền AdminHướng dẫn sử dụng JWT với Spring Boot – Chuẩn bị
Công nghệ sử dụng:
- Java 8+Spring Boot 2.3.4+ (có Spring Security, Spring Web và Spring Data JPA)JJWT 0.9.1+MySQL 8Maven 3.6.1+
Công cụ sử dụng:
- IDE sử dụng Eclipse phiên bản 2022-06 hoặc cao hơnPostman phiên bản tiên tiến nhất
Hướng dẫn sử dụng JWT với Spring Boot – Các bước thực hiện
1/ Tạo dự án công trình bất Động sản Spring Boot sử dụng Spirng Initializer
- Chọn Generate để tải file dự án công trình bất Động sản về máyGiải nén file vừa tải về và import vào eclipse
Tại eclipse -> chọn File -> chọn Open Projects from File System… -> chọn Directory… -> chỉ định thư mục chứa file đã giải nén -> chọn project -> chọn Select Folder
2/ Bổ sung dependency
3/ Khai báo application.properties
spring.datasource.url= jdbc:mysql://localhost:3306/jwt?useSSL=false spring.datasource.username= root spring.datasource.password= root spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.hibernate.ddl-auto= update # App Properties bezkoder.app.jwtSecret= bezKoderSecretKey bezkoder.app.jwtExpirationMs= 86400000Lưu ý:
- Password đăng nhập vào MySQL trên máy chúng tôi là rootTên cơ sở tài liệu trên MySQL là jwt
4/ Tạo Entity
Mỗi entity là một table trong MySQL. Chúng ta cần tạo 3 tables trong database gồm users, roles và user_roles. Trong số đó users và roles là quan hệ nhiều nhiều. Trước khi tạo những entity này, tất cả chúng ta sẽ tạo một package tên entities
Ngoài ra khi tạo entity tên Role tất cả chúng ta cần một Enum khai báo 3 roles gồm User, Moderator và Admin.
a/ Chúng tôi sẽ tạo Enum tên ERole này tại vn.giasutinhoc.demo.jwt.common
- Chuột phải lên vn.giasutinhoc.demo.jwt.common -> chọn New -> chọn Enum
b/ Tạo những entity thuộc vn.giasutinhoc.demo.jwt.entities
Tạo entity tên Role
Tạo entity tên User
5/ Tạo Repository
Mỗi một entity cần một repository để thao tác với tài liệu. Chúng ta cần tạo 2 repositories tại vn.giasutinhoc.demo.jwt.repositories
a/ Tạo UserRepository
b/ Tạo RoleRepository
6/ Tạo Java class tên UserDetailsImpl trong vn.giasutinhoc.demo.jwt.services
7/ Tạo Service tên UserDetailsServiceImpl trong vn.giasutinhoc.demo.jwt.services
8/ Tạo JWT Utility
Tạo Java class tên JwtUtils thuộc vn.giasutinhoc.demo.jwt.common và có 3 hiệu suất cao gồm
- Tạo JWT từ username, date, expiration và secretLấy username từ JWTXác nhận JWT
9/ Xử lý ngoại lệ về xác thực (Authencation)
Chúng ta tạo một Java class tên AuthEntryPointJwt tại vn.giasutinhoc.demo.jwt.config thực thi (implements) AuthenticationEntryPoint
HttpServletResponse.SC_UNAUTHORIZED đó đó là 401, cho biết thêm thêm yêu cầu cần xác thực
10/ Lọc những yêu cầu
Chúng ta tạo một Java class tên AuthTokenFilter tại vn.giasutinhoc.demo.jwt.config thừa kế OncePerRequestFilter
11/ Cấu hình Spring Security
Tại vn.giasutinhoc.demo.jwt.config, tạo một Java class tên WebSecurityConfig thừa kế WebSecurityConfigurerAdapter
12/ Tạo những DTO (Data Transfer Object)
a/ LoginRequest gồm username, password
package vn.giasutinhoc.demo.jwt.dto; public class LoginRequest private String username; private String password; /** * Create an empty LoginRequest object */ public LoginRequest() super(); /** * Create a LoginRequest object with full attributes * * @param username user's user name * @param password */ public LoginRequest(String username, String password) super(); this.username = username; this.password = password; /** * @return the username */ public String getUsername() return username; /** * @param username the username to set */ public void setUsername(String username) this.username = username; /** * @return the password */ public String getPassword() return password; /** * @param password the password to set */ public void setPassword(String password) this.password = password;b/ SignupRequest gồm username, email, password và role
package vn.giasutinhoc.demo.jwt.dto; import java.util.Set; public class SignupRequest private String username; private String email; private String password; private Setc/ JwtResponse gồm token, type, id, username, email và roles
package vn.giasutinhoc.demo.jwt.dto; import java.util.List; public class JwtResponse private String token; private String type = "Bearer"; private Long id; private String username; private String email; private Listd/ MessageResponse gồm message
package vn.giasutinhoc.demo.jwt.dto; public class MessageResponse private String message; public MessageResponse(String message) this.message = message; public String getMessage() return message; public void setMessage(String message) this.message = message;Kết quả sau khi tạo xong những DTO
13/ Tạo Spring Rest API Controller
Controller này tương hỗ APIs cho việc đăng ký và đăng nhập, trong đó
- Tính năng đăng ký sẽ có URL là /api/auth/signupTính năng đăng nhập sẽ có URL là /api/auth/signin
a/ Tạo Java class tên AuthController tại vn.giasutinhoc.demo.jwt.controllers
b/ Tạo thêm một Controller dùng để test tên TestController trong vn.giasutinhoc.demo.jwt.controllers
package vn.giasutinhoc.demo.jwt.controllers; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @CrossOrigin(origins = "*", maxAge = 3600) @RestController @RequestMapping("/api/test") public class TestController @GetMapping("/all") public String allAccess() return "Public Content."; @GetMapping("/user") @PreAuthorize("hasRole('USER') or hasRole('MODERATOR') or hasRole('ADMIN')") public String userAccess() return "User Content."; @GetMapping("/mod") @PreAuthorize("hasRole('MODERATOR')") public String moderatorAccess() return "Moderator Board."; @GetMapping("/admin") @PreAuthorize("hasRole('ADMIN')") public String adminAccess() return "Admin Board.";Cấu trúc project sau khi hoàn tất tiến trình trên
Hướng dẫn sử dụng JWT với Spring Boot – Build, run và demo
1/ Build và run
Chuột phải tại Application.java -> chọn Run as -> chọn Java Application
Quan sát tại Console
Quan sát tại MySQL Workbench
Mở cửa số nhập lệnh và thực thi những câu lệnh sau để tạo những role như USER, MOD và ADMIN
use jwt; INSERT INTO roles(name) VALUES('ROLE_USER'); INSERT INTO roles(name) VALUES('ROLE_MODERATOR'); INSERT INTO roles(name) VALUES('ROLE_ADMIN');Dữ liệu tại bảng roles sau khi tạo
2/ Demo
Mở Postman và thực hiện tạo tài khoản, đăng nhập và kiểm tra authentication, authorization
a/ Tạo tại khoản loại mod
- URL: ://localhost:8080/api/auth/signupMethod: POSTBody
b/ Tạo tài khoản loại user
"username": "kylh84", "email": "", "password": "Abc12345", "role": ["user"]c/ Tạo tài khoản loại admin
"username": "admin", "email": "", "password": "Abc12345", "role": ["admin"]Dữ liệu tại những bảng users và user_roles
c/ Test xác thực và phân quyền
- Truy cập tài nguyên không yêu cầu xác thực
- Truy cập tài nguyên cần xác thực, trong trường hợp chưa xác thực khối mạng lưới hệ thống sẽ thông báo Unauthorized
- Truy cập tài nguyên cần xác thực, trong trường hợp đã xác thực (Đã đăng nhập và có access token)
- Xác thực với role là user (Sử dụng access token sau khi đã đăng nhập thành công)
Hướng dẫn sử dụng JWT với Spring Boot – Kết luận
Chúng ta đã hoàn thành xong bài hướng dẫn về cách sử dụng Spring Security và JSON Web Tooken với Spring Boot. Thông qua bài hướng dẫn này, những bạn đã biết phương pháp cầu hình cũng như cách tạo access tooken sau khi người tiêu dùng đã login.
Các bạn tự mình test những role khác ví như admin, mod để hiểu hơn về phân quyền (Authorization). Chẳng hạn những bạn đang là role mode nhưng thao tác như role admin thì khối mạng lưới hệ thống sẽ báo Forbidden
[embed]https://www.youtube.com/watch?v=kMzfu8CRyrQ[/embed]