Сохранение значения на сервере - Java Spring Boot - PullRequest
0 голосов
/ 23 марта 2020

Итак, я разрабатываю свой первый API с использованием Spring Boot. Этот API вызывает и конечную точку и использует токен для аутентификации запросов, сделанных к нему. Я хотел знать, есть ли какой-нибудь способ сохранить переменную на сервере, чтобы я мог получить к ней доступ для любого запроса, сделанного к моему API. Значение, которое я хочу сохранить, является токеном, предоставленным этой конечной точкой, который действителен в течение короткого периода времени, и по истечении этого срока я могу сделать еще один запрос на получение нового.

Заранее спасибо !

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Как указано в комментариях, вам может быть лучше использовать кеш (предпочтительно) или БД. Но если это невозможно, вы всегда можете использовать какое-либо решение в памяти, которое имеет свои собственные риски, например, как поддерживать состояние в разных JVM (в случае, если имеется несколько серверов)?


Теперь, когда мы имеем это в стороне, давайте посмотрим, хотите ли вы сделать это с кешем / базой данных в памяти.

Кеш Изучите реализованную реализацию кеша в памяти Google Guava Library или что-то подобное. Со страницы -

Как правило, утилиты кэширования Guava применяются всякий раз, когда:

  • Вы готовы потратить часть памяти для повышения скорости.
  • Вы ожидаете, что ключи иногда будут запрашиваться более одного раза.
  • В вашем кеше не требуется хранить больше данных, чем помещается в ОЗУ. (Кэши Guava являются локальными для одного запуска вашего приложения. Они не хранят данные в файлах или на внешних серверах. Если это не соответствует вашим потребностям, рассмотрите инструмент, подобный Memcached .)

Загрузка токенов во время приложения bootstrap путем реализации CacheLoader, которая будет вызываться каждый раз, когда требуется новое значение.

LoadingCache<String, String> tokensByResource = CacheBuilder.newBuilder()
   .maximumSize(1000)
   .build(
       new CacheLoader<String, String>() {
         public Token load(String resource) throws AnyException {
           return createToken(key);
         }
       });

Получение токена кэша перед каждым вызовом REST-

try {
  return tokensByResource.get(key);
} catch (ExecutionException e) {
  throw new RuntimeException(e.getCause());
}

База данных

Рассмотрите возможность использования встроенной в память / встроенной базы данных, которую Spring Boot поддерживает , например, H2 . Если вы не хотите терять данные при перезапуске сервера, можно указать местоположение файла (подробнее об этом ниже). H2 также поставляется с консолью , которая может быть полезна для отладки / создания отчетов и т. Д. c.

Добавить зависимость maven:

<dependency>
  <groupId>com.h2database</groupId>
  <artifactId>h2</artifactId>
  <version>1.4.200</version>
</dependency>

Добавить это в applicationaton.properties -

spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect

#Use following to preserve data to file between restarts
spring.datasource.url=jdbc:h2:file:/data/demo

Как только вы настроите эту настройку, обработайте ее как любую другую обычную базу данных SQL для операций CRUD. Во время инициализации приложения создайте токен bootstrap и сохраните его в H2.

0 голосов
/ 23 марта 2020

Вы должны использовать JWT аутентификацию для обеспечения безопасности API. Смотрите эту ссылку .

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