0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Hướng Dẫn Sử Dụng Spring Security 6 với JWT và Oauth2 - Phần 1

Đăng vào 4 ngày trước

• 4 phút đọc

1. Giới thiệu

Chào mừng các bạn đến với phần đầu tiên của series hướng dẫn sử dụng Spring Security 6 kết hợp với JWTOauth2. Bài viết này sẽ mở rộng kiến thức từ bài viết trước về cách cấu hình bảo mật cho Spring Boot 3 (nếu bạn chưa đọc, có thể tìm hiểu tại đây: Spring Boot 3 và Spring Security 6). Chúng ta sẽ đi sâu vào việc triển khai các giải pháp bảo mật quan trọng mà bạn sẽ tiếp xúc trong thực tế. Cuối bài, mình cũng sẽ giới thiệu về KeyCloak, một công cụ hữu ích trong việc quản lý danh tính và quyền truy cập.

Link đến series: Spring Security 6 với JWT và Oauth2

2. Thiết lập môi trường phát triển

Trong bài viết đầu tiên này, chúng ta sẽ xây dựng một Project REST API với các API cơ bản phục vụ cho mục đích bảo mật. Dưới đây là thông tin chi tiết về project cũng như các dependency cần thiết:

Lưu ý: Để giảm độ phức tạp và đảm bảo rằng các API hoạt động chính xác, chúng ta sẽ không thêm các dependency bảo mật vào project ngay lập tức. Chúng ta sẽ thực hiện điều này ở phần sau.

Cấu hình application.properties

Chúng ta cần cấu hình file application.properties để kết nối đến MySQL:

Copy
spring.application.name=spring-security
spring.datasource.url=jdbc:mysql://localhost:3306/spring_security
spring.datasource.username=sc
spring.datasource.password=123456
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

3. Tạo các REST API

3.1. Tạo Entity

Để tương tác với MySQL, chúng ta cần tạo các Entity. Dưới đây là class User trong package entity:

Copy
@Entity
@Table(name = "users")
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long userId;
    private String username;
    private String password;
    private String firstName;
    private String lastName;
    private String email;
}

3.2. Tạo Repository

Chúng ta sẽ tạo interface UserRepository mở rộng từ JpaRepository để tương tác với database:

Copy
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

3.3. Tạo Service

Tiếp theo, hãy định nghĩa interface UserService với các method cần thiết:

Copy
public interface UserService {
    User createUser(User user);
    List<User> getUsers();
    User getUserById(Long userId);
    User updateUser(Long userId, User user);
}

Chúng ta sẽ triển khai interface này trong class UserServiceImpl:

Copy
@Service
@RequiredArgsConstructor
public class UserServiceImpl implements UserService {
    private final UserRepository userRepository;

    @Override
    public User createUser(User user) {
        return userRepository.save(user);
    }

    @Override
    public List<User> getUsers() {
        return userRepository.findAll();
    }

    @Override
    public User getUserById(Long userId) {
        return userRepository.findById(userId).orElse(null);
    }

    @Override
    public User updateUser(Long userId, User user) {
        User existingUser = userRepository.findById(userId).orElse(null);
        if (existingUser != null) {
            existingUser.setUsername(user.getUsername());
            existingUser.setEmail(user.getEmail());
            existingUser.setFirstName(user.getFirstName());
            existingUser.setLastName(user.getLastName());
            return userRepository.save(existingUser);
        }
        return null;
    }
}

3.4. Tạo Controller

Cuối cùng, chúng ta tạo class UserController nằm trong package controller để xử lý các yêu cầu từ client:

Copy
@RestController
@RequestMapping("/api/users")
@RequiredArgsConstructor
public class UserController {
    private final UserServiceImpl userService;

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User createdUser = userService.createUser(user);
        return ResponseEntity.ok(createdUser);
    }

    @GetMapping
    public ResponseEntity<List<User>> getUsers() {
        List<User> users = userService.getUsers();
        return ResponseEntity.ok(users);
    }

    @GetMapping("/{userId}")
    public ResponseEntity<User> getUser(@PathVariable Long userId) {
        User user = userService.getUserById(userId);
        return ResponseEntity.ok(user);
    }

    @PutMapping("/{userId}")
    public ResponseEntity<User> updateUser(@PathVariable Long userId, @RequestBody User user) {
        User updatedUser = userService.updateUser(userId, user);
        return ResponseEntity.ok(updatedUser);
    }
}

4. Kiểm Tra API Bằng Postman

Dưới đây là dữ liệu mẫu để test API:

Copy
{
    "username": "john_doe",
    "password": "SecurePass123!",
    "firstName": "John",
    "lastName": "Doe",
    "email": "john.doe@example.com"
}

5. Kết Luận

Trên đây là hướng dẫn xây dựng project REST API cơ bản. Trong phần tiếp theo, chúng ta sẽ bổ sung các tính năng bảo mật vào project này. Mã nguồn dự án có thể được tìm thấy tại đây: GitHub - spring-security

Hy vọng bài viết sẽ hữu ích cho các bạn trong quá trình học tập và làm việc với Spring Security!
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào