String.valueOf 함수에 null 을 넣으면 "null"을 반환한다

장서연·2022년 4월 21일
0

CookieUtil

public class CookieUtil {
   /**
    * 쿠키 이름을 받아 쿠키값 반환 🍪
    * @return
    */
   public static String getCookie(HttpServletRequest request, String key) throws Exception{
       Cookie[] cookies = request.getCookies();
       if(key == null || cookies == null) return null; // null 을 반환
       String value = "";
       for (int i=0; i< cookies.length; i++){
           if (cookies[i].getName().equals(key)){
               value = java.net.URLDecoder.decode(cookies[i].getValue(), "UTF-8");
           }
       }
       return value;
   }
}

JwtAuthorizationFilter.java

try {
            accessToken = String.valueOf(CookieUtil.getCookie(request,"accessToken"));
            refreshToken = String.valueOf(CookieUtil.getCookie(request, "refreshToken"));
        } catch (Exception e) {
            e.printStackTrace();
        }

CookieUtil.getCookie(request, "accessToken")에서 키에 해당하는 쿠키값이 없어null 을 반환하면, String.valueOf 함수는 null 자체를 스트링으로 보고 "null" 로 반환한다.

고로 accessToken 에 담긴 값은 "null" 이 되는데, 이 값은 null 이 아니라 문자열이다.

JwtAuthorizationFilter.java

...
System.out.println("accessToken 출력: " + accessToken); 

        if(accessToken == null) {
            chain.doFilter(request, response);
            return;
        }
...

콘솔에는 null 이라고 나오지만, 사실은 문자열 "null" 이 출력되는 것이다.

if 문에서, accessToken 이 null 인지 검사하면, null 이 아니기 때문에 if 문에 들어가지 못하게 되고, 필터도 타지 못하게 된다.

-> 에러 발생!

따라서 쿠키 유틸의 쿠키값가져오는 함수에서 쿠키값이 없을 때 null 을 반환하는 것이 아니라 "" 빈 문자열을 반환하게 함으로써 해결했다.

[결론]String.valueOf() 함수에 null 을 넣으면 "null" 을 반환한다...

0개의 댓글