Комплексное руководство по работе с токенами JWT в Spring Boot

Веб-токены JSON (JWT) широко используются для безопасной аутентификации и авторизации в современных веб-приложениях. В этой статье блога мы рассмотрим различные методы обработки токенов JWT в приложении Spring Boot. Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять детали реализации. Давайте погрузимся!

  1. Создание токенов JWT:
    Чтобы сгенерировать токен JWT, вы можете использовать следующий фрагмент кода:
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
public class JwtUtil {
    public static String generateToken(String subject, long expirationMillis, String secretKey) {
        return Jwts.builder()
                .setSubject(subject)
                .setExpiration(new Date(System.currentTimeMillis() + expirationMillis))
                .signWith(SignatureAlgorithm.HS512, secretKey)
                .compact();
    }
}
  1. Разбор и проверка токенов JWT.
    Чтобы проанализировать и проверить токен JWT, вы можете использовать следующий фрагмент кода:
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jws;
import io.jsonwebtoken.Jwts;
public class JwtUtil {
    public static Jws<Claims> parseToken(String token, String secretKey) {
        return Jwts.parser()
                .setSigningKey(secretKey)
                .parseClaimsJws(token);
    }

    public static boolean isTokenValid(String token, String secretKey) {
        try {
            parseToken(token, secretKey);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
}
  1. Добавление токена JWT в ответ HTTP:
    Чтобы добавить токен JWT в ответ HTTP, вы можете использовать следующий фрагмент кода:
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
public class JwtFilter extends OncePerRequestFilter {
    private JwtUtil jwtUtil;

    public JwtFilter(JwtUtil jwtUtil) {
        this.jwtUtil = jwtUtil;
    }

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
                                    FilterChain filterChain) throws ServletException, IOException {
        // Retrieve the authenticated user
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();

        // Generate a JWT token
        String token = jwtUtil.generateToken(authentication.getName(), 86400000, "yourSecretKey");

        // Add the token to the response header
        response.addHeader("Authorization", "Bearer " + token);

        filterChain.doFilter(request, response);
    }
}
  1. Защита конечных точек с помощью токенов JWT.
    Чтобы защитить свои конечные точки с помощью токенов JWT, вы можете использовать Spring Security. Вот пример конфигурации:
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    private JwtFilter jwtFilter;

    public SecurityConfig(JwtFilter jwtFilter) {
        this.jwtFilter = jwtFilter;
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
                .authorizeRequests()
                .antMatchers("/public").permitAll()
                .anyRequest().authenticated()
                .and()
                .addFilterBefore(jwtFilter, UsernamePasswordAuthenticationFilter.class);
    }
}

В этой статье мы рассмотрели различные методы обработки токенов JWT в приложении Spring Boot. Мы рассмотрели создание токенов, анализ и проверку токенов, добавление токенов в HTTP-ответы и защиту конечных точек с помощью токенов. Реализуя эти методы, вы можете обеспечить безопасную аутентификацию и авторизацию в своих приложениях Spring Boot.