У нас приготовлен такой вот коктейль, и мне хочется получить в методе текущего юзера через какую нибудь анотацию.
Как то вот так.
@POST
@Path("/some")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public JsonResponse login(@FormParam("some1") String some1, @Context HttpServletRequest request, @
(
Read more... )
Comments 10
@PreAuthorize("isAuthenticated()")
@RequestMapping(method = RequestMethod.GET)
public String all(Model model, Principal principal)
{
User user = userService.findByLoginOrEmail(principal.getName());
...
Но, для вас это наверное тоже полумера. Но по-моему spring security нигде не хранит конкретно ваш domain объект юзера так как он ему (спрингу) особо и не нужен.
Reply
User user = userService.findByLoginOrEmail(principal.getName());
Вот от этого то я и хочу избавиться в первую очередь.
Но кстати тоже улучшение ... спасибо ... а это jersey или spring webflow?
Reply
Reply
Reply
Reply
Reply
Я уже понял что могу положить своего юзера в UserDetails имплементацию принципала.
Но это же кастить принципала и тащить из него юзера !в каждом методе!.
Мне хотелось получить совсем готовое чтоб ни одного стейтмента не фигать об этом в фактически бизнес методе.
Странно что никто из этих зверей не догадался такое сделать.
Reply
в контроллере:
public class AbstractController {
...
@ModelAttribute("currentUser")
private UserEntity getCurrentUser(ServletRequest request) {
// тут я вычислял юзера, UserEntity это мой доменный класс для пользователя.
// вам видимо потребуется спринговый UserDetails вместо сервлет реквеста, уверен, спринг с этим справится
}
}
Все остальные контроллеры наследовались от AbstractController (увы), и методы, которым нужен был текущий юзер, аннотировались следующим образом:
@RequestMapping(value = "/userUsingMethod.htm", method = RequestMethod.GET)
public View userUsingMethod(@ModelAttribute("currentUser") UserEntity user, ...) {
// ...и вот я получил доменную модель юзера аннотацией
}
Reply
попробую поискать в ентом джерси аналог. Спасибо.
Reply
сам же интерфейс просто инъектится везде, где нужно, на уровне объекта (а не метода, как в вопросе), и с помощью его методов можно сразу и авторизацией заниматься, и всякую информацию про пользователя узнавать, и preferences его менять, и пароль и т.п.
у нас предусмотрено несколько реализаций интерфейса, т.к. в разных приложениях проекта используются разные хранилища пользовательских учёток со своими особенностями модели представления данных
Reply
Leave a comment