Sobes.tech
Назад к вопросам
Middle
3

Расскажи про 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);
    }
}