Jwt 파싱할 때 발생한 오류다.
구글링해서 알아보니 parsing한 secert key 값이 원래 로컬에 저장된 secret key값과 달라서 발생하는 오류라고 한다.
먼저 오류 발생했던 초기 코드는 아래와 같다.
Jwts.parser().setSigningKey(secretKey).parseClaimsJws(token).getBody().getSubject();
이후 구글링을 통해 다수의 사람들이 해결하던 .getBytes()를 추가하는 방식으로 수정해봤으나 오류가 해결되지 않았다.
.getBytes()를 통해 바이트 형식으로 키 값을 다뤄 key 값이 토큰에 들어가거나 파싱되는 순간에 변경이 되는 걸 방지한다는 디버깅 방식이었다.
Jwts.parser().setSigningKey(secretKey.getBytes()).parseClaimsJws(token).getBody().getSubject();
위 방식으로도 해결이 안된 이후로 몇 시간 동안 이 코드만 디버깅을 시도했었다.
구글링해도 자료가 많지 않아 난항을 겪고 있던 와중에 한 중국인이 올린 코드를 보게 됐고 그 분 방식처럼 아예 parsing하는 함수를 따로 분리하면서 문법도 바꿔 작성하니 오류가 해결됐다...
참고한 글은 아래 참고 사이트에 링크 남겼고 내가 작성한 오류 해결 코드는 아래와 같다.
/**
* Access 토큰 파싱
* @param jwt
* @return
*/
public Claims parseJwt(String jwt) {
Claims claims = Jwts.parser()
.setSigningKey(secretKey)
.parseClaimsJws(jwt)
.getBody();
return claims;
}
Claims claims = parseJwt(token);
String s=claims.getSubject();
참고 사이트
'Spring > 오류 잡기' 카테고리의 다른 글
[디버깅] 조회 응답 DTO 클래스 java.lang.nullpointerexception: null 오류 (0) | 2022.02.27 |
---|---|
[디버깅] CORS(Cross-Origin Resource Sharing) 오류 (0) | 2022.02.14 |
[디버깅] Redis관련 ERR Client sent AUTH, but no password is set (0) | 2022.02.07 |
[디버깅] Consider defining a bean of type 'org.springframework.security.crypto.password.PasswordEncoder' in your configuration. (0) | 2022.02.05 |
[디버깅] cannot access MimeMessage (0) | 2022.02.05 |