package com.nicatguliyev.jwt.learn_jwt.security; import java.io.IOException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.User; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.web.authentication.WebAuthenticationDetailsSource; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import com.nicatguliyev.jwt.learn_jwt.service.JwtService; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @Component public class JWTAuthenticationFilter extends OncePerRequestFilter { private final JwtService jwtService; public JWTAuthenticationFilter(JwtService jwtService) { this.jwtService = jwtService; } @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { //System.out.println("DOFILTERINTERNAL RUNNING"); String autHeader = request.getHeader("Authorization"); if (autHeader == null || !autHeader.startsWith("Bearer ")) { filterChain.doFilter(request, response); return; } String token = autHeader.substring(7); String username = jwtService.extractUserName(token); if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) { UserDetails userDetails = User.withUsername(username).password("").build(); UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken( userDetails, null); authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); SecurityContextHolder.getContext().setAuthentication(authenticationToken); } filterChain.doFilter(request, response); } }