/**
   * 编码
   *
   * @param value
   * @param ac
   * @return
   */
  private String encodeValue(String value, AttributeConfigDO ac) {
    if (StringUtils.isEmpty(value)) {
      return value;
    }

    if (ac.isEncrypt()) {
      value = BlowfishUtils.encryptBlowfish(value, CRYPT_KEY);
    }

    try {
      value = URLEncoder.encode(value, "UTF-8");
    } catch (Exception e) {
      log.error("编码失败, value=" + value, e);
      // 编码失败时,返回错误标记,且不保存到cookies中
      return ERROR;
    }
    return value;
  }
  /**
   * 解码
   *
   * @param value
   * @param ac
   * @return
   */
  private String decodeValue(String value, AttributeConfigDO ac) {
    if (value == null) {
      return value;
    }

    try {
      value = URLDecoder.decode(value, "UTF-8");
    } catch (Exception e) {
      // logger.error("解码失败", e);
      // 解码失败时直接返回,不继续解析
      return value;
    }

    if (ac.isEncrypt()) {
      value = BlowfishUtils.decryptBlowfish(value, CRYPT_KEY);
    }

    return value;
  }