Chuyên mục
Backend
APIs, databases and distributed systems.

Role chỉ là authority có tiền tố ROLE_, vì sao hasRole("ROLE_ADMIN") luôn cho 403, thiết kế role gom quyền để thêm vai trò không phải sửa code — và hai thứ im lặng làm hỏng method security.

Vì sao Serializable của Java bị cả ngành rời bỏ, ObjectMapper tạo một lần dùng mãi, bẫy TypeReference khi đọc List do xóa kiểu — và vì sao record hợp với JSON tới mức không cần annotation nào.

Access token 15 phút cộng refresh token 7 ngày lưu database, vì sao refresh token không nên là JWT, rotation biến việc dùng lại token thành chuông báo động — và sự thật rằng đăng xuất của JWT là "không cấp thêm".

Path là một cái tên chứ không phải một file, resolve và normalize cùng bẫy path traversal, Files ném ngoại lệ có tên thay vì trả false, ATOMIC_MOVE để ghi file an toàn — và walk, find, glob thay hẳn đệ quy tự viết.

OncePerRequestFilter đọc header Bearer và đặt SecurityContext, lắp trước UsernamePasswordAuthenticationFilter cùng cấu hình STATELESS, khi nào tắt CSRF là hợp lệ — và refresh token lưu DB để lấy lại khả năng thu hồi.

Hai họ stream cho byte và reader cho ký tự, buffered biến một triệu syscall thành hơn trăm, bẫy charset mặc định làm vỡ tiếng Việt — và đọc file lớn bằng Files.lines thay vì nạp hết vào RAM.

Cấu trúc ba phần của JWT và vì sao payload không hề được mã hóa, ký token bằng khóa bí mật đủ dài, endpoint đăng nhập dùng lại AuthenticationManager — cùng đánh đổi lớn nhất: không thu hồi được.

Vì sao finally viết tay vừa dài vừa sai, cú pháp nhiều tài nguyên đóng theo thứ tự ngược, suppressed exception giữ lại lỗi gốc — và bẫy quên đóng stream của Files.walk.
