소개
JHipster는 Java 개발자를 위한 자바 웹 애플리케이션 개발 플랫폼입니다. JHipster를 사용하면 Spring Boot와 Angular/React/Vue.js를 기반으로 한 멋진 애플리케이션을 손쉽게 만들 수 있습니다.
JWT(토큰 기반 인증)는 애플리케이션 인증에 많이 사용되는 방법 중 하나입니다. JWT는 클라이언트와 서버 간의 통신을 안전하게 유지하며 세션 상태를 관리하는 데 사용됩니다.
이 블로그 포스트에서는 JHipster에서 JWT를 사용하는 방법에 대해 알아보겠습니다.
JHipster에서 JWT 사용하기
- JHipster 생성하기
먼저 JHipster를 설치하고 기본 애플리케이션 구조를 생성해야 합니다. 다음 명령어를 사용하여 JHipster 애플리케이션을 생성합니다.
jhipster
- JWT 종속성 추가하기
생성된 프로젝트 폴더에서 pom.xml
파일을 열고 다음 종속성을 추가합니다.
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.11.2</version>
</dependency>
- JWT 구성하기
이제 JWT를 구성해야 합니다. SecurityConfiguration.java
파일을 열고 다음 구성을 추가합니다.
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.springframework.security.core.Authentication;
...
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private static final String SECRET_KEY = "your-secret-key";
protected void configure(HttpSecurity http) throws Exception {
// JWT 필터 추가
http.addFilterBefore(new JWTFilter(), UsernamePasswordAuthenticationFilter.class);
...
}
// JWT 생성
private static String generateToken(Authentication authentication) {
UserDetailsImpl userDetails = (UserDetailsImpl) authentication.getPrincipal();
Date now = new Date();
Date expiryDate = new Date(now.getTime() + 86400000);
return Jwts.builder()
.setSubject(userDetails.getUsername())
.setIssuedAt(now)
.setExpiration(expiryDate)
.signWith(SignatureAlgorithm.HS512, SECRET_KEY)
.compact();
}
}
위 코드에서 your-secret-key
부분은 사용자 정의 비밀 키로 대체해야 합니다.
- 인증 컨트롤러 구성하기
JWT 인증을 처리하기 위해 컨트롤러를 구성해야 합니다.
@RestController
@RequestMapping("/api/auth")
public class AuthController {
@PostMapping("/login")
public ResponseEntity<?> authenticateUser(@RequestBody LoginRequest loginRequest) {
Authentication authentication = authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(loginRequest.getUsername(), loginRequest.getPassword())
);
SecurityContextHolder.getContext().setAuthentication(authentication);
String token = SecurityConfiguration.generateToken(authentication);
return ResponseEntity.ok(new JwtAuthenticationResponse(token));
}
}
- JWT 필터 생성하기
마지막으로 JWT 필터를 생성하여 애플리케이션의 모든 요청에 대해 JWT를 검증할 수 있습니다.
public class JWTFilter extends OncePerRequestFilter {
private static final String HEADER_STRING = "Authorization";
private static final String TOKEN_PREFIX = "Bearer ";
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
String header = request.getHeader(HEADER_STRING);
if (header != null && header.startsWith(TOKEN_PREFIX)) {
String token = header.replace(TOKEN_PREFIX, "");
// JWT 검증 로직 추가
}
chain.doFilter(request, response);
}
}
위 코드에서는 // JWT 검증 로직 추가
부분에 실제 JWT 검증 로직을 작성해야 합니다.
결론
이 블로그 포스트에서는 JHipster와 JWT를 사용하여 애플리케이션 인증을 구현하는 방법을 살펴보았습니다. JHipster와 JWT를 함께 사용하면 빠르고 안전한 애플리케이션을 개발할 수 있습니다.
더 많은 정보를 원한다면 JHipster 공식 웹사이트를 참조하세요.