В настоящее время у меня есть несколько веб-приложений, которые обращаются к общему сервису, работающему в JBoss 5.0. Сервис очень прост с использованием Guice и POJO. Веб-приложения проходят проверку подлинности и знают, кто пользователь и какие роли он выполняет. При вызове службы, как я должен передать эту информацию аутентификации в службу?
Казалось бы, простой подход состоит в том, чтобы просто добавить параметр в интерфейс для получения пользовательской информации. Возможно Тема. Но у этого есть обратная сторона - загромождать интерфейс контекстной информацией, которая не относится к конкретной работе.
void doSomething(Subject subject, ...) {
}
Альтернатива, которую я видел, состоит в том, чтобы использовать хранилище ThreadLocal, помещать туда информацию о пользователе, прежде чем делать вызов, и сделать ее доступной через некоторый служебный класс, который может использовать служба. Это очищает интерфейс, но скрывает тот факт, что клиент службы должен установить информацию о пользователе перед выполнением вызова.
Есть ли другой способ сделать это? У меня такое ощущение, что АОП здесь тоже может быть полезным, но я не совсем понимаю, как это сделать. Есть ли какая-то «лучшая практика», по которой я скучаю? Поможет ли EJB?