Kotlin/Spring
(Spring) 인증 개발을 하면서 겪은 다양한 버그들
너어디사니
2024. 6. 5. 20:07
1. Error creating bean with name 'jwtPlugin' defined in file
- 여러가지 원인이 있을 수가 있었다
- Jwt의 의존성이 제대로 적용이 안되어 있을 수 있다
- application.yml 파일에 설정을 제대로 적용을 안했을 수도 있다
- JwtPlugin에 @Component Annotation을 붙여주지 않았다
- 나는 이번에 확인 시 에 2번 application.yml 파일에 설정을 제대로 되지 않은 문제가 있었다 정확하게 말하면 주입 받는 생성자에 제대로 된 경로를 적어주지 않아서 발생한 문제였다 따라서 해당 경로를 수정해주면서 문제를 해결 했다
AS-IS
@Component
class JwtPlugin(
@Value("\${jwt.issuer}") private val issuer: String, //경로 누락
@Value("\${jwt.secret}") private val secret: String, //경로 누락
//경로 누락 및 } 누락
@Value("\${jwt.accessTokenExpirationHour") private val accessTokenExpirationHour: Long,
) {
fun validToken(jwt: String): Result<Jws<Claims>>{
return kotlin.runCatching {
val key = Keys.hmacShaKeyFor(secret.toByteArray(StandardCharsets.UTF_8))
Jwts.parser().verifyWith(key).build().parseSignedClaims(jwt)
}
}
TO-BE
@Component
class JwtPlugin(
@Value("\${auth.jwt.issuer}") private val issuer: String,
@Value("\${auth.jwt.secret}") private val secret: String,
@Value("\${auth.jwt.accessTokenExpirationHour}") private val accessTokenExpirationHour: Long,
) {
fun validToken(jwt: String): Result<Jws<Claims>>{
return kotlin.runCatching {
val key = Keys.hmacShaKeyFor(secret.toByteArray(StandardCharsets.UTF_8))
Jwts.parser().verifyWith(key).build().parseSignedClaims(jwt)
}
}
2. NotAuthenticationException 발생 시에 애러 메세지가 안나오는 현상
- 단순하게 ErrorResponse를 body로 리턴하지 않고 build를 해버려서 원하는 에러 메세지가 나오지 않는 현상이었다
AS-IS
@ExceptionHandler(NotAuthenticationException::class)
fun notAuthenticationException(e: Exception): ResponseEntity<ErrorResponseDto>{
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).build() // 오류 메세지 전송 안함
}
TO-BE
@ExceptionHandler(NotAuthenticationException::class)
fun notAuthenticationException(e: Exception): ResponseEntity<ErrorResponseDto>{
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(ErrorResponseDto("인증 오류 : ${e.message}"))
}