У меня есть webapp, который делает вызов REST для соответствующих функций. Скажем, у меня есть webapp, в котором пользователь регистрируется и генерируется пара KeyValue, которая требуется для аутентификации во время ssh.
Теперь эта пара KeyValue уникальна. И другая веб-страница того же приложения. Я хочу, чтобы эти пары KeyValue загружались как ppk-файл в ssh. «Так что требуется конкретный объект».
Так есть способ хранения объекта. У меня есть DB Postgres.
Каковы мои возможные варианты?
Edit: Объект Я хочу сохранить, является третьей стороной реализована библиотека JSch (которая является полная реализация SSH-2), так что просто пара ключ-значение не может быть решение, я думаю)Сохранение объектов Java для дальнейшего использования в WebApp, использующем REST
ответ
Как я хотел получить ключ для ssh'ing в мою машину, которая предоставляется объектом KeyPair объекта JSch.Я хранил его в своей базе данных сериализации для будущих приложений, как это,
@Entity
@Table(name ="keypairs")
public class KeyPairDomain {
private Long id;
private String username;
private byte[] byteObject;
private KeyPair keypair;
public KeyPairDomain(KeyPair kpair, String username) {
super();
this.setUsername(username);
this.keypair = kpair;
}
@Transient
public KeyPair getKeypair() {
return keypair;
}
public void setKeypair(KeyPair complexObject) {
this.setKeypair(complexObject);
ByteArrayOutputStream baos;
ObjectOutputStream out;
baos = new ByteArrayOutputStream();
try {
out = new ObjectOutputStream(baos);
out.writeObject(complexObject);
out.close();
} catch (IOException e) {
e.printStackTrace();
}
this.byteObject = baos.toByteArray();
}
@Column(columnDefinition = "bytea")
public byte[] getByteObject() {
return byteObject;
}
public void setByteObject(byte[] byteObject) {
ByteArrayInputStream bais;
ObjectInputStream in;
try {
bais = new ByteArrayInputStream(byteObject);
in = new ObjectInputStream(bais);
setKeypair((KeyPair) in.readObject());
in.close();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
this.byteObject = byteObject;
}
public String getUsername() {
return username;
}
@Column(name = "username")
public void setUsername(String username) {
this.username = username;
}
@Id
@GeneratedValue
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
но хранится файл ППК в TMP папке любого типа машины. И при необходимости я использую это местоположение для извлечения этого ключа.
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_OCTET_STREAM)
@POST
@Path("/getCredentials")
public Response getCredentials(HashMap<String, String> userDetails) {
String username = userDetails.get("username");
File homedir = new File(System.getProperty("user.home"));
File file = new File(homedir, "credentials/" + username + "/Key.ppk");
System.out.println("File Path: "+file.getAbsolutePath());
System.out.println("File Name: "+file.getName());
return Response.ok(file, MediaType.APPLICATION_OCTET_STREAM)
.header("Content-Disposition", "attachment; filename=" +file.getName()).build();
}
Если вы хотите сохранить только одну пару ключ/значение, вы можете сохранить ее в сеансе. Если вы хотите хранить несколько пар, он работает аналогично, но вы должны хранить набор пар в сеансе. Посмотрите на HttpServletRequest.getSession() для деталей.
Если вы хотите разделить пару ключ/значение на всех сеансах (другие пользователи, несколько браузеров), и у вас есть только один веб-сервер, просто используйте статическую переменную.
Если вы хотите разделить пару ключ/значение на всех сеансах, и у вас есть несколько серверов, тогда вам нужно будет сохранить их в базе данных (если только вы не захотите создать некоторый протокол обмена данными между серверами, но я сомневаюсь, что это было бы самое простое, что вы могли бы сделать).
REST является апатридом. Это означает отсутствие сеанса. –
Сессия здесь не является вариантом. Но сохранение в DB кажется вариантом. –
Сессия является частью webapp, а не службы REST, вызываемой webapp. Служба, являющаяся RESTful (и, следовательно, без гражданства), не означает, что webapp также является апатридом. Утверждение Аакаша о том, что сеанс не является опцией, ясно показывает это. –
ОТДЫХ является апатридом, поэтому его невозможно на стороне сервера!
Вы можете создать токен, который является шифрованием ключа пары, значение на стороне сервера и отправить его клиенту (браузеру).
Браузер несет ответственность за предоставление токена и отправку его на сервер, если это необходимо.
Сервер может расшифровать токен и получить исходную пару значений ключа.
Это предоставит вам, что клиент не может получить доступ к значению ключа пары, поскольку он зашифрован таким образом, что клиент не может его прочитать.
Примечание Если вам необходимо его поддерживать эти значения только для ограниченного количества времени, которое вы можете зашифровать в маркере также значении, соответствующее создание маркеров или последний доступ к маркеру.
Этот метод обычно используется для обслуживания сеансов на стороне клиента в приложении, которое использует только вызовы REST, но нуждается в обслуживании информации, относящейся к текущему пользователю.
Davide. Проблема в том, что если браузер будет поддерживать объект, тогда я думаю, что вы предлагаете LocalStorage или SessionStorage, но его можно изменить и изменить, то есть он доступен, но не читается. Так что это может быть не очень хорошая идея для проекта IMO. –
Его нельзя изменить, поскольку он зашифрован с помощью закрытого ключа, и изменение на это приведет к недействительности самого токена. –
Это проблема, если она становится недействительной, тогда она становится бесполезной, когда я буду ее требовать. Или есть еще? –
Вы должны сохранить пару значений ключа в БД. Вы можете использовать redis для более быстрого доступа к этой паре, похожей на кеш, и автоматического удаления в зависимости от времени истечения, которое вы хотите установить.
Точно так же данные кэшируются серверами в сеансах. Поскольку API-интерфейсы REST не имеют данных, у вас есть этот альтернативный вариант, который должен работать нормально.
- 1. Сохранение типового параметра типа для дальнейшего использования
- 2. Сохранение сохраненного файла для дальнейшего использования на стороне сервера GWT
- 3. Невозможно назначить главный узел LinkedList в Java для дальнейшего использования
- 4. конвертировать java webapp для использования аутентификации SAML2
- 5. Изоморфизм в SPA, использующем услугу REST
- 6. Скопируйте определенный текст для дальнейшего использования
- 7. C# Создание сборки для дальнейшего использования
- 8. Заставить пользователя обновить приложение для дальнейшего использования
- 9. Экспортировать любые объекты для дальнейшего повторного использования?
- 10. Как правильно вернуть массив для дальнейшего использования?
- 11. «Сохранение» объекта для будущего использования в Java
- 12. Java Сохранение объектов
- 13. Retrofit 2 объект данных ответа на возврат для дальнейшего использования
- 14. Сохранение объектов Java в файлах
- 15. Проектирование REST - сохранение большого набора связанных объектов
- 16. Использование lynx в оболочке, сохранение дампа для дальнейшего grep
- 17. Java: Сохранение выбранного значения для последующего использования
- 18. как сохранить сеанс в android для дальнейшего использования в quickblox
- 19. Сохранение дорогостоящих объектов для повторного использования в ASP.NET MVC?
- 20. Сохранение объектов с помощью Java
- 21. Как сохранить данные пользователя для дальнейшего использования в angularjs
- 22. Хранить фрагмент текста в приложении для дальнейшего использования
- 23. сохранить файлы css в браузере для дальнейшего использования
- 24. Значения повторного использования, введенные в GUI Tkinter для дальнейшего программирования
- 25. Сохранение индивидуальных данных из цикла для дальнейшего использования (после окончания цикла)
- 26. Сохранение условий для дальнейшего выбора из базы данных. Дизайн-вызов
- 27. Сохранение объектов для структуры
- 28. Сохранение классов и объектов в файл (Java)
- 29. сохранение объектов для разбора
- 30. Служба REST уведомляет JSF WebApp
Выполните одно из ответов работать для вашего сценария? – Prateek
Я сохранил его на сервере и в БД также для будущей цели. Я получил за простое и прямое решение –
Можем ли мы обсудить ваше решение – Prateek