Насколько я понимаю, вы можете попробовать обернуть значение DB.datasource
чем-то вроде этого (где currentUser()
и currentPassword()
должны возвращать учетные данные текущего пользователя, который делает запрос):
public class DataSourceWrapper {
private DataSource original;
public DataSourceWrapper(DataSource original) {
this.original = original;
}
public Connection getConnection() {
return original.getConnection(currentUser(), currentPassword());
}
...
public DataSource getOriginal() {
return original;
}
}
Замена DB.datasource
должна происходить между выполнением onApplicationStart()
методов DB и JPA-плагинов, так что вам нужно создать собственный плагин:
public class DataSourceReplacementPlugin extends PlayPlugin {
public void onApplicationStart() {
DB.datasource = new DataSourceWrapper(DB.datasource);
}
public void onApplicationStop() {
if (DB.datasource instanceof DataSourceWrapper) {
DB.datasource = ((DataSourceWrapper) DB.datasource).getOriginal();
}
}
}
и зарегистрироваться в соответствующемуровень приоритета в conf/play.plugins
:
350: DataSourceReplacementPlugin