Мне нужно сохранить идентификатор пользователя или идентификатор сеанса в нескольких таблицах после каждого обновления, чтобы узнать, какой пользователь внес изменения. Прямой/наивный подход состоит в том, чтобы передать идентификатор пользователя или идентификатор сеанса в каждом вызове dao во всех ресурсах и изменить каждое дао, чтобы принять его как параметр, а затем сохранить в db. Есть ли лучший/модульный/эффективный подход для этого?В dropwizard (с использованием jdbi с dao и объектами ресурсов), как я могу элегантно сохранять идентификатор пользователя/сеанса в таблице базы данных для каждого обновления?
2
A
ответ
2
Если вы используете Guice (и библиотеку dropwizard-guice) внутри вашего проекта, одним из вариантов было бы создание bebe-объекта с запросом и внедрение своего провайдера внутри вашего dao. Таким образом, вы можете создать внутри вашего guice module
:
@Provides
@RequestScoped
public SessionInfo domainContext(HttpHeaders headers) {
return new SessionInfo(headers.getHeaderString("sessionId"));
}
}
, а затем придать Provider<SessionInfo>
вашему дао.
Другим вариантом является реализация фильтра запросов и установка заголовка идентификатора сеанса с использованием ThreadLocal
. Это может быть, как это:
public class SessionContext {
private static final ThreadLocal<String> session = new ThreadLocal<>();
public static String getSession() {
return session.get();
}
public static void setSession(String sessionValue) {
session.set(sessionValue);
}
}
и простой фильтр:
@Provider
public class SessionFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
SessionContext.setSession(requestContext.getHeaderString("test"));
}
}
Вы могли бы использовать SessionContext
объект внутри вашего дао.
У вас может быть фильтр, если вы имеете в виду информацию о сеансе из вызова ресурса и обновляете все там? Если вы используете guice, у вас могут быть перехватчики, которые выполняют эту работу за вас, и комментируют методы, которые требуют такого поведения. – pandaadb