인프런 커뮤니티 질문&답변

김우철님의 프로필 이미지

작성한 질문수

코드로 배우는 React with 스프링부트 API서버

Axios인터셉터와 AccessToken

질문이있습니다

24.10.30 14:38 작성

·

34

0

섹션8에 axios인터셉터와 access토큰 보고있습니다

 

여기서 지금 todo나 product를 클릭하면 오류나는데

jwtfilter에서

String accessToken = authHeaderStr.substring(7);

이부분에서 request.getHeader ==null 이라 오류가뜨는데

음.,..이게 mainpage나 about페이지에서는 왜오류가 안나는 지 궁금합니다...왜냐면 OncePerRequestFilter 를 상속받아서

if(path.startsWith("/api/member/")){
    return true;
}

조건문을 member만 필터 제외시킨거같은데...

 

 

답변 3

1

구멍가게코딩단님의 프로필 이미지
구멍가게코딩단
지식공유자

2024. 10. 30. 16:35

Todo나 Product 관련된 호출은 JWT가 필요한 호출입니다.

axios.get( )이 아니라 유틸로 만들어둔 jwtAxios를 이용하셔서 호출하셔야 합니다.

0

김우철님의 프로필 이미지
김우철
질문자

2024. 10. 30. 15:05

아 메인페이지나 어바웃페이지는 axios 통신을ㄹ 안하는군요.,....하 죄송합니다 ㅠㅠㅋㅋㅋㅋㅋㅋㅋㅋ

0

인프런 AI 인턴님의 프로필 이미지

2024. 10. 30. 14:41

안녕하세요, 김우철님. 인프런 AI 인턴입니다.

말씀해 주신 상황을 보니, JWT 필터링 과정에서 request.getHeader()null을 반환하여 오류가 발생하고 있는 것 같습니다. 이에 대한 몇 가지 점을 살펴보겠습니다.

문제의 원인

  1. 헤더가 없는 요청: authHeaderStr.substring(7); 부분에서 authHeaderStr이 비어있거나 null일 경우, substring 메서드는 에러를 발생시킬 수 있습니다. 이는 사용자가 인증이 필요한 페이지로 접속할 때 JWT 토큰이 헤더에 포함되지 않아서 발생할 수 있습니다.

  2. MainPage와 AboutPage와의 차이: mainpageabout 페이지는 인증이 필요 없는 경로로 설정되었거나, API 요청이 없을 수 있습니다. 반면 todoproduct는 API 요청을 통해 데이터를 가져오며, 이 과정에서 인증이 필요할 가능성이 있습니다. 따라서 JWT가 필요 없거나 제외된 페이지에서는 오류가 발생하지 않을 수 있습니다.

해결 방법

  1. JWT 필터 예외 처리: getHeader()의 결과가 null인 경우를 대비한 예외 처리를 추가하여, 조건문으로 토큰이 없을 경우를 처리해 주세요.

    String authHeaderStr = request.getHeader("Authorization");
    if (authHeaderStr == null || !authHeaderStr.startsWith("Bearer ")) {
        return;
    }
    
  2. 필터 적용 경로 확인: shouldNotFilter 메서드에서 필터가 적용되지 않을 대상을 명확히 확인하여 필요한 경로에 대해서만 필터가 작동하도록 조정 주세요.

관련하여 도움이 될 수 있는 기존 답변을 추천해 드릴게요:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해 드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.