Концепция внешнего удостоверения личности? - PullRequest
1 голос
/ 09 апреля 2020
@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private int id;
    private String name;

    private String externalID; //<--- why we need this?

}

Кто-то предложил мне включить в класс внешнее поле Id что-то в этом роде? Любые предложения, почему это может быть?

Ответы [ 3 ]

1 голос
/ 09 апреля 2020

Не уверен, что именно здесь подразумевается под externalID, поскольку случай использования неясен. Но я предполагаю пару случаев:

1. Внешняя служба

Внешний идентификатор может использоваться для сопоставления вашей сущности с некоторым идентификатором другого ресурса из других служб. Нечто, идентифицирующее эту сущность в другой системе.

Например : в externalID может храниться идентификатор твиттера или идентификатор банковского счета.

2. С точки зрения безопасности

externalID используется для защиты (инкапсуляции) внутреннего id видимого снаружи, что может вызвать некоторые уязвимости безопасности.

Например, : В в вашем случае внутренним значением id является Integer с GenerationType.AUTO, это означает, что все сущности будут иметь инкрементный идентификатор: 1, 2, 3, ... Зная, что кто-то может анализировать ваши вызовы API и легко выполнять итерацию по всем вашим учетным записям с помощью API, например: GET api/person/{id}.

Обычно для решения этой проблемы используются идентификаторы другого типа, например UUID, например: 8b9af550-a4c7-4181-b6ba-1a1899109783. Который может использоваться как externalID в вашем случае. Итак, я предполагаю, что это является причиной для добавления дополнительных externalID к вашей сущности.

Примечание : если ваша База данных поддерживает использование UUID (или хранит его как String), вы можете просто замените свой внутренний идентификатор на UUID и избавьтесь от externalID здесь.

0 голосов
/ 09 апреля 2020

Цель внешнего идентификатора - связать вашу сущность с другим представлением ее из системы, которая отделена от вашей.

Например, если вы хотите сохранить идентификатор Facebook по причинам единого входа, вы должны сделать это через поле, которое можно назвать externalId, или что-то в этом роде. Другим примером может быть то, что вы импортировали некоторые учетные записи из другой базы данных и хотите сохранить первичный ключ из импортированной исходной сущности.

В противном случае, если это поле не представляет ничего в вашей бизнес-логике c, избавься от этого.

0 голосов
/ 09 апреля 2020

Возможно, что externalID представляет первичный ключ другой таблицы, к которой относится этот человек. Строка, однако, совершенно произвольна, вы обычно используете Integer, Long или UUID для представления первичного ключа. Возможно, нужно больше контекста в вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...