之前範例展示了如何在每次HTTP請求中檢查JWT Token並從中提取用戶資訊。完整的JWT驗證流程會涉及更多步驟,例如Token的有效性檢查、過期時間檢查以及設置Spring Security上下文等,這些可以在實際應用中進一步實現。
整合 JwtService 與J wtAuthenticationFilter 在我們的 JwtAuthenticationFilter 中,我們可以使用 JwtService 來解析和驗證 Token,然後設置 Spring Security 的上下文,讓後續的安全性操作能夠正確識別用戶。
if (userEmail != null && SecurityContextHolder.getContext().getAuthentication() == null) {
UserDetails userDetails = this.userDetailsService.loadUserByUsername(userEmail);
if(jwtServece.isTokenValid(jwt, userDetails)) {
UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(
userDetails,
null,
userDetails.getAuthorities()
);
authToken.setDetails(
new WebAuthenticationDetailsSource().buildDetails(request)
);
SecurityContextHolder.getContext().setAuthentication(authToken);
}
}
這段代碼展示了如何在過濾器中整合 JwtService 來解析 JWT Token 並設置 Spring Security 上下文。這樣的設置可以確保之後的請求能夠通過Spring Security的身份驗證和授權機制來保護應用程序的資源。