Servlet側でCookieのパース

高瀬 裕介 323views 更新:2014年4月3日
  BasicClientCookie parseRawCookie(String rawCookie) throws Exception {
    String[] rawCookieParams = rawCookie.split(";");

    String[] rawCookieNameAndValue = rawCookieParams[0].split("=");
    if (rawCookieNameAndValue.length != 2) {
      throw new Exception("Invalid cookie: missing name and value.");
    }

    String cookieName = rawCookieNameAndValue[0].trim();
    String cookieValue = rawCookieNameAndValue[1].trim();
    BasicClientCookie cookie = new BasicClientCookie(cookieName, cookieValue);
    for (int i = 1; i < rawCookieParams.length; i++) {
      String rawCookieParamNameAndValue[] =
        rawCookieParams[i].trim().split("=");

      String paramName = rawCookieParamNameAndValue[0].trim();

      if (paramName.equalsIgnoreCase("secure")) {
        cookie.setSecure(true);
      } else {
        if (rawCookieParamNameAndValue.length != 2) {
          throw new Exception(
            "Invalid cookie: attribute not a flag or missing value.");
        }

        String paramValue = rawCookieParamNameAndValue[1].trim();

        if (paramName.equalsIgnoreCase("expires")) {
          Date expiryDate = DateFormat.getDateTimeInstance().parse(paramValue);
          cookie.setExpiryDate(expiryDate);
        } else if (paramName.equalsIgnoreCase("max-age")) {
          long maxAge = Long.parseLong(paramValue);
          Date expiryDate = new Date(System.currentTimeMillis() + maxAge);
          cookie.setExpiryDate(expiryDate);
        } else if (paramName.equalsIgnoreCase("domain")) {
          cookie.setDomain(paramValue);
        } else if (paramName.equalsIgnoreCase("path")) {
          cookie.setPath(paramValue);
        } else if (paramName.equalsIgnoreCase("comment")) {
          cookie.setPath(paramValue);
        } else {
          throw new Exception("Invalid cookie: invalid attribute name.");
        }
      }
    }

    return cookie;
  }

ログイン / 新規登録してコメントする

このソースコードをストックして後で利用したり、作業に利用したソースコードをまとめることができます。

こちらもお役に立つかもしれません