결론
과제 2-8, 2-9 완료
코드카타 : 푸드 파이트 대회
RequestContextHolder의 개념
에러 Illegal base64 character 2d
에러 io.jsonwebtoken.security.WeakKeyException
RequestContextHolder
AOP는 메서드 호출 시점에서 동작하는 것이기 때문에, 일반적인 서블릿 필터처럼 직접적으로 `HttpServletRequest`를 주입받지 않는다. 따라서 현재 요청에 대한 정보를 얻으려면, 스프링이 제공하는 `RequestContextHolder`를 통해 접근해야 한다.
이 방법을 사용하면 AOP에서도 현재의 HTTP 요청에 접근할 수 있기 때문에, 서블릿의 어트리뷰트를 가져오거나 다른 요청 관련 정보를 얻고자 할 때 유용합니다.
Illegal base64 character 2d 에러 원인 : 시크릿 키를 Base64 문자열로 사용하지 않은 경우
- Illegal base64 character 2d: 이 메시지는 키에 포함된 2d(즉, `` 문자)가 Base64 인코딩에 적합하지 않음을 나타냅니다. Base64 인코딩된 문자열에는 알파벳 대문자와 소문자, 숫자, +, / 문자만 포함될 수 있으며, 패딩을 위한 = 문자도 허용됩니다.
해결 방법
- 유효한 Base64 문자열 사용:
- jwt.secret.key로 사용된 문자열이 올바르게 Base64 인코딩된 문자열인지 확인하세요. 만약 이 문자열이 직접 생성된 값이라면, 이를 Base64로 올바르게 인코딩해야 합니다.
- java 코드 복사 String secretKey = "your-plain-text-key"; String encodedKey = Base64.getEncoder().encodeToString(secretKey.getBytes());
- 키를 Base64 인코딩하지 않은 상태로 사용:
- 만약 키를 인코딩하지 않고 원래의 문자열 그대로 사용하고 싶다면, Base64로 디코딩하지 않도록 JwtUtil 클래스에서 처리 방법을 수정할 수 있습니다.
- java 코드 복사 @PostConstruct public void init() { // 기존의 Base64 디코딩을 제거하거나, 필요에 따라 유효한 Base64 문자열로 변경 this.key = Keys.hmacShaKeyFor(secretKey.getBytes(StandardCharsets.UTF_8)); }
- 문자열 교체:
- 키에 사용된 문자열에서 ``(하이픈)과 같은 유효하지 않은 Base64 문자를 제거하거나 대체할 수 있습니다. 그러나 이는 보안을 고려하여 적절한 방법으로 수행해야 합니다.
에러 io.jsonwebtoken.security.WeakKeyException 원인 : JWT 키가 너무 짧음
- io.jsonwebtoken.security.WeakKeyException은 JWT 토큰을 생성하는 데 사용되는 키의 크기가 너무 작아서 발생합니다. HMAC-SHA256 알고리즘을 사용하려면 키 크기가 최소 256비트(32바이트) 이상이어야 합니다.
해결 방법
- 더 긴 비밀 키 사용:
- jwt.secret.key로 설정된 비밀 키를 더 길고 복잡한 값으로 변경해야 합니다. 최소 256비트(32바이트) 이상의 키를 사용하세요.
- properties 코드 복사 jwt.secret.key=your-longer-and-more-secure-key-which-is-at-least-32-characters
- java 코드 복사 import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.security.Keys; public class JwtUtil { private String secretKey; @PostConstruct public void init() { byte[] keyBytes = secretKey.getBytes(StandardCharsets.UTF_8); if (keyBytes.length < 32) { // 32 bytes == 256 bits throw new IllegalArgumentException("Key is too short. It must be at least 256 bits."); } this.key = Keys.hmacShaKeyFor(keyBytes); } }
- 자동으로 키 생성:
- 보다 안전한 방식으로 키를 자동으로 생성하고 관리하려면 다음과 같은 방법을 사용할 수 있습니다:
java 코드 복사 import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.security.Keys; public class JwtUtil { private Key key; @PostConstruct public void init() { this.key = Keys.secretKeyFor(SignatureAlgorithm.HS256); // 이 방법은 안전한 256비트 키를 자동으로 생성합니다. } }
'내일배움캠프 > 회고록' 카테고리의 다른 글
| 10월 11일 주특기 플러스 과제 회고 (1) | 2024.10.11 |
|---|---|
| 8월 23일 금요일 (0) | 2024.08.26 |
| 8월 22일 목요일 (0) | 2024.08.23 |
| 8월 19일 월요일 (0) | 2024.08.20 |
| 8월 13일 화요일 (0) | 2024.08.14 |