Проверка REST токена в сервисе на уровне Middleware

Здравствуйте,

Возникла задача в сервисе на Middleware уровне проверять REST токен для того чтобы идентифицировать пользователя и выставить текущий SecurityContext.

Здесь мне порекомендовали воспользоваться бином com.haulmont.addon.restapi.rest.ServerTokenStore и его методом getSessionInfoByTokenValue(). Этот механизм прекрасно работает, но есть одна проблема: com.haulmont.addon.restapi.rest.ServerTokenStore работает только с REST токенами, которые были получены в рамках текущего жизненного цикла куба-приложения. Если приложение перезагрузить, то старые токены больше не работают. Хотя при этом у меня выставлено свойство cuba.rest.storeTokensInDb, т.е. токены хранятся в БД и они являются валидными даже при перезапуске приложения. Например через REST API я могу эти токены использовать без проблем даже после перезапуска приложения.

Добрый день,
Указанный метод учитывает упомянутое вами свойство и загружает токен из БД.

Но дело в том, что после перезагрузки сервера сессия просто теряется, её нет.
Когда вы используете токен в REST API, то новая сессия создается автоматически, осуществляется новый вход в систему.

Логика, которая выполняет перелогин по токену, расположена примерно тут:
com.haulmont.addon.restapi.api.auth.ClientProxyTokenStore#readAuthentication(java.lang.String)
com.haulmont.addon.restapi.api.auth.ClientProxyTokenStore#processSession

Но возможно, что в core модуле воспользоваться ей не получится. Т.к. методы выше опираются на классы oauth / restapi (OAuth2Authentication), которые в обычной конфигурации модулей недоступны модулю core.

Спасибо за наводку. Покопаю в эту сторону.