126 bài 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.

UserDetailsService chỉ đòi một method, luồng đăng nhập qua DaoAuthenticationProvider và PasswordEncoder, entity người dùng cùng chuyện tiền tố ROLE_ — và bốn cái bẫy, mở đầu là thông báo lỗi tiết lộ quá nhiều.

Khi nào đáng tạo exception mới và khi nào dùng lại loại chuẩn, thiết kế exception mang dữ liệu có cấu trúc chứ không chỉ message, ba nguyên tắc viết message — cùng cây phân cấp, mã lỗi và fail fast.

Cấu hình bean và lambda của Security 6, luật khớp theo thứ tự khai báo với anyRequest cuối cùng, BCryptPasswordEncoder và salt tự sinh — cùng hai chỗ hay làm sai nhất là CSRF và CORS.

Thứ tự catch từ con tới cha và multi-catch, ba cái bẫy của finally — trong đó return làm exception biến mất không dấu vết — cùng chuyện ném lại hay bọc lại và cách xử lý InterruptedException.