iT邦幫忙

2024 iThome 鐵人賽

DAY 11
0

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上下文等,這些可以在實際應用中進一步實現。


上一篇
Day 10 範例
下一篇
Day 12 JwtService
系列文
Spring Boot微服務架構:API設計與實現30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言