0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Chi Tiết Về Cách Sử Dụng Filter Trong Spring Boot Để Xác Thực JWT

Đăng vào 1 tuần trước

• 2 phút đọc

Chào mọi người,

Tiếp nối từ bài viết trước, hôm nay mình sẽ chia sẻ chi tiết về các loại Filter trong Spring Boot và lý do tại sao nên sử dụng OncePerRequestFilter cho xác thực JWT, thay vì sử dụng các lớp implement Filter thông thường hay kế thừa từ GenericFilterBean.

1. Tại sao không nên sử dụng Filter?

Filter là interface cơ bản trong Java Servlet API, cung cấp các phương thức như init, doFilter, và destroy. Tuy nhiên, việc tự triển khai Filter yêu cầu bạn quản lý toàn bộ luồng xử lý và logic để tránh việc xử lý lặp lại trong cùng một request.

Nhược điểm:

  • Dễ dẫn đến lỗi khi filter xử lý lặp lại trong các trường hợp như forward hoặc error dispatch.
  • Mã nguồn phức tạp hơn vì bạn phải tự viết các logic kiểm tra và quản lý.

Ví dụ một Filter bình thường:

java Copy
@Component
public class JwtFilter implements Filter {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // Kiểm tra và xử lý JWT
        // Lặp lại không kiểm soát khi có forward
        chain.doFilter(request, response);
    }
}

2. Tại sao không nên sử dụng GenericFilterBean?

Mặc dù GenericFilterBean giúp bạn bỏ qua việc viết các phương thức initdestroy, nhưng nó không đảm bảo rằng filter chỉ được thực thi một lần cho mỗi request. Bạn vẫn sẽ cần viết thêm logic kiểm tra để đạt được điều đó.

Demo sử dụng GenericFilterBean:

java Copy
@Component
public class JWTAuthFilter extends GenericFilterBean {
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        // Logic xác thực JWT
        chain.doFilter(request, response);
    }
}

3. Tại sao nên sử dụng OncePerRequestFilter?

OncePerRequestFilter được thiết kế để đảm bảo logic xử lý chỉ được thực hiện một lần cho mỗi request, ngay cả khi request được forward, include hay error dispatch. Điều này thực sự quan trọng trong xác thực JWT.

Lợi ích của OncePerRequestFilter:

  • Xử lý một lần duy nhất cho mỗi request: Không bao giờ bị lặp lại trong các tình huống phức tạp.
  • Cung cấp phương thức doFilterInternal: Giúp bạn dễ dàng triển khai mà không cần phải lo về các phương thức khác.

Demo sử dụng OncePerRequestFilter cho xác thực JWT:

java Copy
@Component
public class JWTAuthorizationFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        // Logic xác thực JWT ở đây
        filterChain.doFilter(request, response);
    }
}

Kết luận

Sử dụng OncePerRequestFilter trong Spring Boot là lựa chọn tối ưu cho việc triển khai xác thực JWT. Nó đảm bảo xử lý một lần duy nhất cho mỗi request và giúp đơn giản hóa logic xử lý. Nếu bạn có thắc mắc hay muốn mình đi sâu hơn vào một phần nào đó, hãy để lại câu hỏi trong phần bình luận nha!

Cảm ơn các bạn đã đọc bài viết này!
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