Я пытаюсь написать политики на уровне строк, которые проверяют права пользователя перед выполнением запросов. В этом контексте мне нужно иметь возможность установить переменную сеанса, содержащую идентификатор пользователя, когда соединение извлекается из пула соединений, и сбросить / освободить ту же переменную сеанса, когда соединение возвращается в пул. Следующий блог может дать хорошее представление о том, что я пытаюсь сделать: https://blog.2ndquadrant.com/application-users-vs-row-level-security/
В моей настройке у меня есть следующие слои:
- Хикари:
HikariDataSource
- Spring:
TransactionAwareDataSourceProxy
(с использованием источника данных Hikari),DataSourceTransactionManager
(с использованием источника данных Hikari) - jOOQ:
DataSourceConnectionProvider
(с использованием источника данных Spring),DefaultDSLContext
Первые два слоя - только внутренние. То есть все запросы в приложении выполняются через jOOQ, последний уровень.
Итак, мне нужно иметь возможность реализовать обратный вызов при подключении take from pool
и give back to pool
.
Я просматривал документацию по Hikari и Spring, но не нашел ничего полезного. Вероятно, это мой первый вопрос: предоставляют ли такие обратные вызовы Hikari и / или Spring?
Следующим шагом в моем исследовании был jOOQ. Наткнулся на ExecuteListener
. Это мой дополнительный вопрос: ExecuteListener
подойдет ли для этого ExecuteListener
хорошее приложение? Это не реализует фактическую точку, когда соединение берется и возвращается, но execution context
, вероятно, достаточно хорош в моем случае (поскольку все мои запросы выполняются в jOOQ)? Если да, следует ли мне реализовать функции start
и end
?