sakthivikram/geo-location
0
1package com.georeport.security;2 3import jakarta.servlet.FilterChain;4import jakarta.servlet.ServletException;5import jakarta.servlet.http.HttpServletRequest;6import jakarta.servlet.http.HttpServletResponse;7import org.springframework.beans.factory.annotation.Autowired;8import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;9import org.springframework.security.core.context.SecurityContextHolder;10import org.springframework.security.core.userdetails.UserDetails;11import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;12import org.springframework.stereotype.Component;13import org.springframework.util.StringUtils;14import org.springframework.web.filter.OncePerRequestFilter;15 16import java.io.IOException;17 18/**19 * JWT Authentication Filter.20 * Intercepts each request to validate JWT token and set authentication.21 */22@Component23public class JwtAuthenticationFilter extends OncePerRequestFilter {24 25 @Autowired26 private JwtTokenProvider tokenProvider;27 28 @Autowired29 private CustomUserDetailsService userDetailsService;30 31 @Override32 protected void doFilterInternal(HttpServletRequest request,33 HttpServletResponse response,34 FilterChain filterChain) throws ServletException, IOException {35 try {36 String jwt = getJwtFromRequest(request);37 38 if (StringUtils.hasText(jwt) && tokenProvider.validateToken(jwt)) {39 String email = tokenProvider.getEmailFromToken(jwt);40 41 UserDetails userDetails = userDetailsService.loadUserByUsername(email);42 43 UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(44 userDetails,45 null,46 userDetails.getAuthorities());47 48 authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));49 SecurityContextHolder.getContext().setAuthentication(authentication);50 }51 } catch (Exception ex) {52 logger.error("Could not set user authentication in security context", ex);53 }54 55 filterChain.doFilter(request, response);56 }57 58 /**59 * Extract JWT token from Authorization header60 */61 private String getJwtFromRequest(HttpServletRequest request) {62 String bearerToken = request.getHeader("Authorization");63 if (StringUtils.hasText(bearerToken) && bearerToken.startsWith("Bearer ")) {64 return bearerToken.substring(7);65 }66 return null;67 }68}69 