Я разрабатываю веб-приложение, которое использует Spring Security для аутентификации пользователей.Я знаю, что могу получить зарегистрированного пользователя таким образом:
public class SecurityUtil {
public static User getCurrentUser() {
SecurityContextHolder.getContext().getAuthentication().getPrincipal()
}
}
И таким образом работает отлично.Вопрос в том, каков наилучший способ получить доступ к этому значению?Я приведу несколько примеров:
1.Пользователь объявлен как переменная в контроллере:
public class FooController {
@Autowired
private FooService fooService;
private User u = SecurityUtil.getCurrentUser();
@RequestMapping(...)
public void control() {
fooService.doSomething(u);
}
}
2.Пользователь передан службе как параметр:
public class FooController {
@Autowired
private FooService fooService;
public void control() {
fooService.doSomething(SecurityUtil.getCurrentUser());
}
}
3. Доступ пользователя к сервису:
public class FooService {
public void doSomething() {
SecurityUtil.getCurrentUser();
//Do something
}
}
Все ли эти примеры верны?Могу ли я использовать кого-нибудь из них невнятно?Есть некоторые недостатки, о которых я должен знать?