해결된 질문
작성
·
379
0
안녕하세요.. 저는 spring legacy 로 jwt를 구현했습니다.
로그인 기능까지는 되었는데 인증과정에서 질문이 있습니다.
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("인증이나 권한이 필요한 주소 요청이 됨.");
String header = request.getHeader(JwtProperties.HEADER_STRING);
System.out.println("jwtHeader : " + header);
// header 유무 확인
if (header == null || !header.startsWith(JwtProperties.TOKEN_PREFIX)) {
chain.doFilter(request, response); // 필터를 타겟에 넘겨버리고 리턴
return;
}
// JWT 토큰 검증
String token = request.getHeader(JwtProperties.HEADER_STRING)
.replace(JwtProperties.TOKEN_PREFIX, "");
System.out.println(token);
String username =
JWT.require(Algorithm.HMAC256(JwtProperties.SECRET)).build()
.verify(token).getClaim("username").asString();
System.out.println("토큰 검증 완료");
위의 코드는 JwtAuthorizationFilter에 있는 doFilterInternal 입니다.
header 까지는 잘 들어오는데 알고리즘이 자꾸 맞지 않는다고 합니다.. 포스트맨으로 테스트할 때 login 후 header 값을 복사해 인증이 필요한 페이지에 접근할 때 header에 넣어주었습니다.. 제가 뭘 잘못한 건지 잘 모르겠습니다...ㅠㅠ
답변 2
0
0
안녕하세요 김은지 님, 인프런 AI 인턴이에요.
보내주신 코드와 설명을 토대로 확인해보니, 토큰의 알고리즘이 맞지 않는다는 오류가 발생하는 것으로 보입니다. 이 경우에는 토큰 생성 시 사용한 알고리즘과 검증 시 사용한 알고리즘이 일치해야 합니다.
JwtAuthorizationFilter의 doFilterInternal 메소드에서 사용된 알고리즘 Algorithm.HMAC256(JwtProperties.SECRET)
을 확인해보시고, 로그인 시 토큰을 생성하는 부분의 알고리즘이 동일한지 확인해주세요. 알고리즘을 일치시키는 것으로 문제를 해결할 수 있을 것입니다.
또한, 포스트맨으로 테스트할 때 헤더에 토큰을 올바르게 넣어주셨는지도 확인해보세요. 예를 들어, Bearer [토큰값]
과 같이 올바른 형식으로 헤더에 토큰을 추가해야 합니다.
문제가 지속되면 추가 정보를 주시면 더 자세한 도움을 드릴 수 있을 것입니다. 감사합니다!
헉 넵... 제가 너무 바보같았네요 ㅜㅜㅜㅜㅜ 토큰 생성시 512를 사용하고 있었습니다 ㅜㅜ.. 감사합니다....!!!!