1. 개요
JWT(Json Web Token)는 REST API에서 인증과 권한 부여를 위한 널리 사용되는 방식입니다. Spring Boot 환경에서 JWT 기반 인증을 구현하는 방법을 설명합니다.
2. 프로젝트 설정
2.1. 의존성 추가
build.gradle에 필요한 라이브러리를 추가합니다.
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'io.jsonwebtoken:jjwt:0.11.5'
2.2. JWT 설정 (application.yml)
jwt:
secret: mySecretKey
expiration: 3600000 # 1시간
3. JWT 생성 및 검증
3.1. JWT 유틸 클래스
import io.jsonwebtoken.*;
import io.jsonwebtoken.security.Keys;
import java.util.Date;
import javax.crypto.SecretKey;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class JwtUtil {
@Value("${jwt.secret}")
private String secretKey;
@Value("${jwt.expiration}")
private long expirationTime;
public String generateToken(String username) {
SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes());
return Jwts.builder()
.setSubject(username)
.setIssuedAt(new Date())
.setExpiration(new Date(System.currentTimeMillis() + expirationTime))
.signWith(key, SignatureAlgorithm.HS256)
.compact();
}
public Claims parseToken(String token) {
SecretKey key = Keys.hmacShaKeyFor(secretKey.getBytes());
return Jwts.parserBuilder()
.setSigningKey(key)
.build()
.parseClaimsJws(token)
.getBody();
}
}
4. JWT 기반 인증 적용
4.1. Security 설정
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http.csrf().disable()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers("/auth/**").permitAll()
.anyRequest().authenticated();
return http.build();
}
}
4.2. 로그인 컨트롤러
import org.springframework.web.bind.annotation.*;
import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletResponse;
@RestController
@RequestMapping("/auth")
public class AuthController {
@Autowired
private JwtUtil jwtUtil;
@PostMapping("/login")
public String login(@RequestParam String username, HttpServletResponse response) {
String token = jwtUtil.generateToken(username);
response.setHeader("Authorization", "Bearer " + token);
return "Login successful";
}
}
5. 테스트 방법
- /auth/login 엔드포인트를 호출하여 JWT를 발급받습니다.
- 발급된 토큰을 Authorization 헤더에 추가하여 보호된 엔드포인트에 접근합니다.
6. 결론
Spring Boot에서 JWT를 활용하여 인증을 구현하는 방법을 설명하였습니다. JWT는 상태를 유지하지 않는 인증 방식으로, RESTful 시스템에서 효율적인 보안 모델을 제공합니다. 추가적으로 토큰 검증, 리프레시 토큰 구현 등을 적용하여 보안성을 강화할 수 있습니다.
'기술 학습' 카테고리의 다른 글
JAVA 컬렉션 프레임워크 (Collection Framework) (1) | 2025.02.10 |
---|---|
JAVA 기초 개념과 실습 예제 (0) | 2025.02.09 |
AI 코딩 비서, 어디까지 써봤니? 개발자의 AI 활용 일기 (1) | 2025.02.08 |
Spring Boot에서 REST API 설계 및 구현 (1) | 2025.02.07 |
Spring Boot + Redis로 세션 공유하기 (0) | 2025.02.04 |