JWT 認證過濾器在每次 HTTP 請求中攔截並檢查存在於Header中的 JWT Token。當一個請求到達時,過濾器會:
1. 檢查 Authorization header 是否存在且是否合法(即以 Bearer 開頭)。
2. 將JWT從Header中提取出來。
3. 使用一個服務(例如 JwtService )來解析Token並驗證用戶身份。
##JWT認證過濾器的實現
以下是一個 JwtAuthenticationFilter 類別的範例,它是基於Spring Security OncePerRequestFilter 實現的
@Component
@RequiredArgsConstructor
public class JwtAuthenticationFilter extends OncePerRequestFilter {
private final JwtService jwtServece;
@Override
protected void doFilterInternal(
@NonNull HttpServletRequest request,
@NonNull HttpServletResponse response,
@NonNull FilterChain filterChain
) throws ServletException, IOException {
final String authHeader = request.getHeader("Authorization");
final String jwt;
final String userEmail;
// 檢查Authorization header是否存在以及前綴是否正確
if (authHeader == null || !authHeader.startsWith("Bearer ")) {
filterChain.doFilter(request, response);
return;
}
// 提取JWT
jwt = authHeader.substring(7);
// 從JWT中提取用戶電子郵件
userEmail = jwtServece.extractUserName(jwt);
// 進一步的處理可以在這裡進行,例如設置SecurityContext
filterChain.doFilter(request, response);
}
}
這個範例展示了如何在每次HTTP請求中檢查JWT Token並從中提取用戶資訊。完整的JWT驗證流程會涉及更多步驟,例如Token的有效性檢查、過期時間檢查以及設置Spring Security上下文等,這些可以在實際應用中進一步實現。