Performance: JWT validation filter
This affects the server response time and the time to first byte by adding token validation before processing requests.
Jump into concepts and practice - no test required
public class JwtFilter extends OncePerRequestFilter { private final JwtValidator jwtValidator; public JwtFilter(JwtValidator jwtValidator) { this.jwtValidator = jwtValidator; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = request.getHeader("Authorization"); if (token != null && !jwtValidator.isValid(token)) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return; } filterChain.doFilter(request, response); } } // JwtValidator uses local JWT parsing and signature verification without external calls
public class JwtFilter extends OncePerRequestFilter { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { String token = request.getHeader("Authorization"); if (token != null) { try { // Synchronous blocking call to external service for token validation boolean valid = externalAuthService.validateToken(token); if (!valid) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return; } } catch (Exception e) { response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); return; } } filterChain.doFilter(request, response); } }
| Pattern | Request Blocking | External Calls | Latency Impact | Verdict |
|---|---|---|---|---|
| Synchronous external token validation | Blocks request thread | Yes | Adds 50-200ms latency | [X] Bad |
| Local JWT parsing and validation | Non-blocking | No | Minimal latency added | [OK] Good |
String token = request.getHeader("Authorization");
if (token == null || !jwtUtil.validateToken(token)) {
response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
return;
}
chain.doFilter(request, response);@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
String token = request.getHeader("Authorization");
if (token != null && jwtUtil.validateToken(token)) {
SecurityContextHolder.getContext().setAuthentication(jwtUtil.getAuthentication(token));
}
chain.doFilter(request, response);
}doFilterInternal?