[트러블슈팅] 스프링 플러스 과제

wonyeol shin·5일 전

트러블슈팅

목록 보기
4/4

ExceptionInInitializerError 에러

        return BEARER_PREFIX +
                Jwts.builder()
                        .setSubject(String.valueOf(userId))
                        .claim("email", email)
                        .claim("userRole", userRole)
                        .claim("nickname", nickname)
                        .setExpiration(new Date(date.getTime() + tokenTime))
                        .setIssuedAt(date) // 발급일
                        .signWith(key, signatureAlgorithm) // 암호화 알고리즘
                        .compact();
    }

토큰을 생성하는 코드에서 갑자기 에러가 발생

취약점으로 jjwt-impl 버전먼 0.12.6으로 올렸음
그러다 보니 나머지 버전이 일치하지 않았던것이 원인

버전 12.6으로 통일


Jwts.parserBuilder() 종료

jwt 버전이 올라가면서 예전 방식이 종료 됨

@Slf4j(topic = "JwtUtil")
@Component
public class JwtUtil {

    private static final String BEARER_PREFIX = "Bearer ";

    @Value("${jwt.expiration}")
    private long tokenTime; // 60분

    @Value("${jwt.secret}")
    private String secretKey;

    private SecretKey key;
    //private Key key;
    //private final SignatureAlgorithm signatureAlgorithm = SignatureAlgorithm.HS256;

    @PostConstruct
    public void init() {
        byte[] bytes = Base64.getDecoder().decode(secretKey);
        key = Keys.hmacShaKeyFor(bytes);
    }

    public String createToken(Long userId, String email, String nickname ,UserRole userRole) {
        Date date = new Date();

        return BEARER_PREFIX +
                Jwts.builder().subject(String.valueOf(userId))
                        .claim("email", email)
                        .claim("userRole", userRole)
                        .claim("nickname", nickname)
                        .expiration(new Date(date.getTime() + tokenTime))
                        .issuedAt(date) // 발급일
                        .compact();
    }

    public String substringToken(String tokenValue) {
        if (StringUtils.hasText(tokenValue) && tokenValue.startsWith(BEARER_PREFIX)) {
            return tokenValue.substring(7);
        }
        throw new ServerException("Not Found Token");
    }

    public Claims extractClaims(String token) {
        return Jwts.parser()
                .verifyWith(key)
                .build()
                .parseSignedClaims(token)
                .getPayload();
    }
}

수정

403 에러

url을 추가했는데 필터는 통과되는데
아무리 해도 컨트롤러로 들어오지 못 하는 상황

디버깅을 하고 보니 경로를 todos 가 아닌 todo로 전달 중이였음

profile
백앤드 개발자 준비생

0개의 댓글