Веб-токены JSON (JWT) широко используются для безопасной аутентификации и авторизации в современных веб-приложениях. В этой статье блога мы рассмотрим различные методы обработки токенов JWT в приложении Spring Boot. Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять детали реализации. Давайте погрузимся!
- Создание токенов 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();
}
}
- Разбор и проверка токенов 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;
}
}
}
- Добавление токена 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);
}
}
- Защита конечных точек с помощью токенов 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.