126 bài viết

Mốc nửa chặng: gộp mười bài vừa học thành một chương trình đọc CSV, thống kê bằng collections và xuất báo cáo — cùng quyết định phân biệt code chạy được với code dùng được: bỏ dòng hỏng hay dừng cả file.

Một dòng issuer-uri là đủ, JWKS cho phép hai mươi service verify token mà không service nào giữ bí mật, vì sao bỏ kiểm iss là lỗ hổng chết người — và scope khác role ở chỗ nào.

Hai dòng đầu stack trace nói gần hết câu chuyện, chuỗi Caused by phải đọc từ dưới lên, breakpoint có điều kiện và theo ngoại lệ — cùng ranh giới giữa lúc dùng debugger và lúc chỉ còn log.

Luồng authorization code năm bước và vì sao phải qua code thay vì trả token thẳng, tham số state chống CSRF, cấu hình oauth2Login gọn tới bất ngờ — và vì sao khóa định danh phải là cặp nhà cung cấp cộng id.

Vì sao System.out.println không phải logging, SLF4J là cái cầu chứ không phải bộ ghi log, mức log là câu hỏi ai sẽ đọc dòng này, dấu {} là chuyện hiệu năng — và những thứ tuyệt đối không được log.

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".