Хранение имени пользователя/пароля на Mac с помощью Java

Вы вводите новый прямоугольник, вы можете войти .size() на выбор ввода и увидеть, что добавлен один элемент:

const data = [
  {
    weekId: "w-1",
    start: 100
  },
  {
    weekId: "w-2",
    start: 200
  }
];

const updatedData = [
  {
    weekId: "w-1",
    start: 100
  },
  {
    weekId: "w-2",
    start: 200
  },
  {
    weekId: "w-3",
    start: 300
  }
];

// Create initial data
d3.select("svg")
  .selectAll()
  .data(data, d => d.weekId)
  .enter()
  .append("rect")
  .attr("class", "spline-group")
  .attr("x", w => w.start)
  .attr("y", 20)
  .attr("width", 22)
  .attr("height", 22)
  .attr("fill", "green");

// https://bl.ocks.org/mbostock/3808218
// DATA JOIN
// Join new data with old elements, if any.
const dataGroups = d3
  .selectAll("rect.spline-group")
  .data(updatedData, d => d.weekId);

// UPDATE
// Update old elements as needed.
dataGroups.attr("fill", "blue");

// ENTER
// Create new elements as needed.
const newItems = dataGroups
  .enter()
  .append("rect")
  .attr("class", "spline-group")
  .attr("x", w => w.start)
  .attr("y", 30)
  .attr("width", 20)
  .attr("height", 20)
  .attr("fill", "white");
  
console.log("new items: " + newItems.size());


[119 ]

Итак, если вы вводите новый элемент, куда вы добавляете его? Давайте посмотрим, где находится ваш прямоугольник:

enter image description here

Вы не указали, где вы хотели прямоугольник. При вводе первых прямоугольников вы используете:

d3.select("svg").selectAll("rect")

И ваши введенные элементы создаются как дочерние элементы svg, во втором цикле ввода вы просто используете d3.selectAll("rect"). Вы не указали, где хотите ввести дополнительный элемент, поэтому он был добавлен в документ.

Чтобы убедиться, что вы вводите новые элементы в нужном месте, просто сначала выберите родительский контейнер, как вы это делали при вводе первых двух элементов:

const dataGroups = d3.select("svg") // select SVG
    .selectAll("rect.spline-group") // then select all rects.
    .data(updatedData, d => d.weekId);

dataGroups.attr("fill", "blue");

const newItems = dataGroups
   .enter()
   .append("rect")

const data = [
  {
    weekId: "w-1",
    start: 100
  },
  {
    weekId: "w-2",
    start: 200
  }
];

const updatedData = [
  {
    weekId: "w-1",
    start: 100
  },
  {
    weekId: "w-2",
    start: 200
  },
  {
    weekId: "w-3",
    start: 300
  }
];

// Create initial data
d3.select("svg")
  .selectAll()
  .data(data, d => d.weekId)
  .enter()
  .append("rect")
  .attr("class", "spline-group")
  .attr("x", w => w.start)
  .attr("y", 20)
  .attr("width", 22)
  .attr("height", 22)
  .attr("fill", "green");

// https://bl.ocks.org/mbostock/3808218
// DATA JOIN
// Join new data with old elements, if any.
const dataGroups = d3.select("svg")
  .selectAll("rect.spline-group")
  .data(updatedData, d => d.weekId);

// UPDATE
// Update old elements as needed.
dataGroups.attr("fill", "blue");

// ENTER
// Create new elements as needed.
const newItems = dataGroups
  .enter()
  .append("rect")
  .attr("class", "spline-group")
  .attr("x", w => w.start)
  .attr("y", 30)
  .attr("width", 20)
  .attr("height", 20)
  .attr("fill", "crimson");


9
задан Zarkonnen 7 April 2009 в 22:12
поделиться

3 ответа

Существует связка ключей Java API, в котором существует реализация KeyStore на OS X, поддержанном связкой ключей.

Я думаю, что связка ключей является лучшим местом (если не место) для хранения пароля. Это шифруется с хорошим алгоритмом, пользователь свободен быть столь разрешающим или параноидальным по доступности связки ключей к приложениям, как им нравится, и пароль был бы затем снабжен и настроен как все другие пароли пользовательские хранилища.

14
ответ дан 4 December 2019 в 10:05
поделиться

Я не попробовал это, но похоже, что можно получить доступ к цепочке для ключей с Apple crypto поставщик (com.apple.crypto.provider.Apple), создание a KeyStore из типа KeychainStore.


Хорошо, после некоторого экспериментирования, я смог получить доступ к записям сертификата с закрытым ключом в KeychainStore. Однако пароли в моей Связке ключей не обнаружились (никакой псевдоним не был перечислен), и когда я пытался добавить a KeyStore.SecretKeyEntry (который является тем, что необходимо было бы держать пароль), он перестал работать с сообщением, "Ключом не является PrivateKey". Очевидно, Apple не поддерживала SecretKeyEntry.

Если Вы все еще хотите защитить свой пароль Твиттера через цепочку для ключей, я думаю самое близкое, которое можно получить, должен генерировать пару ключей RSA, самоподписать сертификат и добавить a PrivateKeyEntry к связке ключей. Затем можно использовать пару ключей для защиты пароля Твиттера.

Не ужасно трудно подписать сертификаты самостоятельно, но если Вы идете тем путем, Вы могли бы хотеть проверить библиотеку BouncyCastle для справки.

4
ответ дан 4 December 2019 в 10:05
поделиться

Необходимо смотреть на страницу API Твиттера на поддержке OAuth. При помощи OAuth Вы не должны знать пароль Твиттера пользователя.

http://apiwiki.twitter.com/OAuth-FAQ

3
ответ дан 4 December 2019 в 10:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: