Расскажи про Spring Security: цепочка фильтров, SecurityContext, аутентификация JWT.
Ответ от нейросети
sobes.tech AI
Spring Security строится вокруг цепочки фильтров (Filter Chain), которая перехватывает HTTP-запросы и обрабатывает их последовательно. Каждый фильтр отвечает за определённый аспект безопасности, например, аутентификацию, авторизацию, защиту от CSRF и т.д.
SecurityContext — это объект, который хранит информацию о текущем аутентифицированном пользователе (Principal) и его правах (GrantedAuthorities). Он обычно хранится в SecurityContextHolder и доступен в течение обработки запроса.
Аутентификация JWT в Spring Security обычно реализуется через специальный фильтр, который извлекает JWT из заголовка Authorization, проверяет его подпись и валидность, а затем создаёт Authentication объект с данными пользователя. Этот объект помещается в SecurityContext, после чего остальные фильтры и контроллеры могут использовать информацию о пользователе.
Пример упрощённого фильтра для JWT:
public class JwtAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
String token = extractToken(request);
if (token != null && validateToken(token)) {
Authentication auth = getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
}
filterChain.doFilter(request, response);
}
}