Chào các bạn,
Mới bắt đầu học Spring Boot có thể khiến nhiều người cảm thấy khó khăn và bực bội. Trước đây, tôi cũng như các bạn, đã từng gặp rất nhiều khó khăn khi tìm kiếm thông tin về cách triển khai JWT trong Spring Boot. Do đó, bài viết này sẽ giúp các bạn hiểu rõ hơn về cách hoạt động của Filters trong Spring Boot và cách ứng dụng chúng để triển khai JWT Authorization.
Giới thiệu
Trước khi đi vào chi tiết, có lẽ các bạn đã từng tìm kiếm thông tin về Filters trong Spring Boot hoặc triển khai JWT trong dự án của mình. Tôi từng tìm kiếm với từ khóa Implementing JWT Authentication in a Spring Boot application
và khi đó tôi chỉ cảm thấy hoang mang vì có quá nhiều cách triển khai khác nhau.
Trong bài viết này, chúng ta sẽ cùng khám phá hai phần chính:
- Tìm hiểu về Filters trong Spring Boot và cách hoạt động của chúng.
- Ứng dụng Filters để triển khai JWT Middleware.
1. Hiểu về Filters trong Spring
Khái niệm
Filters trong Spring là các thành phần giúp can thiệp vào quá trình xử lý request và response trong ứng dụng web. Chúng cho phép thực hiện các thao tác trước khi hoặc sau khi một request được xử lý bởi các controller trong ứng dụng.
Khi một request từ client đến với ứng dụng Spring Boot của bạn, nó sẽ đầu tiên đi qua các Filters, nơi mà request sẽ được kiểm tra để quyết định xem có được phép tiếp tục hay không. Như vậy, Filters có thể được xem như là một loại middleware trong Spring Boot.
Các loại Filters trong Spring
Khi tìm hiểu về Filters trong Spring Boot, bạn có thể sẽ gặp 3 loại key word chính: Filter
, GenericFilterBean
, và OncePerRequestFilter
. Sau đây là mô tả tổng quan về từng loại:
-
Filter: Đây là interface gốc trong Java Servlet API. Nó cho phép bạn xử lý các request và response trước khi đến servlet. Để sử dụng, bạn cần phải triển khai các phương thức của interface này.
javapublic interface Filter { void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException; }
-
GenericFilterBean: Đây là lớp tiện ích trong Spring, cung cấp các phương thức cơ bản giúp giảm thiểu lượng code mà bạn cần viết. Khi sử dụng lớp này, bạn chỉ cần ghi đè phương thức
doFilter()
để thực hiện logic của mình.javapublic abstract class GenericFilterBean implements Filter { public abstract void doFilter(ServletRequest request, ServletResponse response, FilterChain chain); }
-
OncePerRequestFilter: Đây là lớp trừu tượng kế thừa từ
GenericFilterBean
, đảm bảo rằng mỗi filter chỉ được thực thi một lần cho mỗi request. Bạn sẽ phải ghi đè phương thứcdoFilterInternal()
để thực hiện logic chính của bạn.javapublic abstract class OncePerRequestFilter extends GenericFilterBean { protected abstract void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain); }
2. Ứng dụng triển khai JWT Authorization
Một ứng dụng phổ biến của Filters là xác thực JWT (Json Web Token). Bạn có thể kế thừa từ OncePerRequestFilter
để triển khai một filter xác thực token như sau:
java
@Component
public class JWTAuthorizationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String jwt = request.getHeader("Authorization");
if (jwt == null || !isValidToken(jwt)) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
filterChain.doFilter(request, response);
}
private boolean isValidToken(String token) {
// Logic kiểm tra token
return true;
}
}
Kết luận
Bài viết đã giúp bạn có cái nhìn tổng quan về Filters trong Spring Boot và cách áp dụng chúng trong việc triển khai JWT Authorization. Hy vọng, bạn sẽ tìm thấy thông tin hữu ích trong bài viết này và có thêm động lực để tiếp tục khám phá Spring Boot hơn nữa.
Cảm ơn các bạn đã đọc! Nếu có bất kỳ thắc mắc nào, đừng ngần ngại để lại câu hỏi dưới bài viết.
Hẹn gặp lại trong phần 2!
source: viblo