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;
}
}
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 이 아니라 문자열이다.
...
System.out.println("accessToken 출력: " + accessToken);
if(accessToken == null) {
chain.doFilter(request, response);
return;
}
...
콘솔에는 null 이라고 나오지만, 사실은 문자열 "null" 이 출력되는 것이다.
if 문에서, accessToken 이 null 인지 검사하면, null 이 아니기 때문에 if 문에 들어가지 못하게 되고, 필터도 타지 못하게 된다.
-> 에러 발생!
따라서 쿠키 유틸의 쿠키값가져오는 함수에서 쿠키값이 없을 때 null 을 반환하는 것이 아니라 "" 빈 문자열을 반환하게 함으로써 해결했다.