Spring: как инициализировать служебный компонент с использованием аутентифицированной информации о пользователе ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Spring: как инициализировать служебный компонент с использованием аутентифицированной информации о пользователе

Сообщение Anonymous »

Кажется, это распространенный случай, но я до сих пор не могу найти подходящего решения.
У меня есть служба, которая тесно связана с пользователем, прошедшим проверку подлинности в данный момент. Он должен тем или иным образом получить userId из контекста более высокого уровня (Контроллера) в качестве аргумента. Служба не может получить доступ к идентификатору пользователя из любого глобально доступного контекста аутентификации, его необходимо получить в качестве аргумента.
Служба также должна быть компонентом (@Service) ), поэтому Spring должен автоматически инициализировать его.
Один из способов добиться этого заключается в следующем:
  • Инициализируйте службу без идентификатора пользователя
  • Затем передайте идентификатор пользователя каждому методу, вызываемому в службе:

Код: Выделить всё

@Service
class MyService
public void method1(int userId) {
// do something with userId
}

public void method2(int userId) {
// do something with userId
}
end

// Usage
myService = new MyService(); // This is done by Spring (with no problem).
myService.method1(getUserIdFromAnyAuthContext())
myService.method2(getUserIdFromAnyAuthContext())
Я хотел бы, чтобы мой сервис работал (если бы он не был компонентом) следующим образом:

Код: Выделить всё

@Service
class MyService
private int currentUserId;

public MyService(int currentUserId) {
this.currentUserId = currentUserId;
}

public void method1() {
// do something with currentUserId
}

public void method2() {
// do something with currentUserId
}
end

// Usage
myService = new MyService(getUserIdFromAnyAuthContext()); // I want Spring to be able to do it and have MyService as a bean.
myService.method1()
myService.method2()
Как использовать службу в качестве bean-компонента и инициализировать ее с помощью данных аутентификации?
Обновлено:
В случае, если это имеет значение (отвечая на комментарий @Anish B.
): я собираюсь использовать Spring Security в качестве поставщика аутентификации. Но обратите внимание: сама служба не может получить доступ ни к одному глобально доступному контексту аутентификации, она должна быть независимой от внешнего контекста.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -user-info

Вернуться в «JAVA»