Spring security + com.sun.jersey:jersey-core:1.17

Aug 06, 2013 15:17

У нас приготовлен такой вот коктейль, и мне хочется получить в методе текущего юзера через какую нибудь анотацию.

Как то вот так.

@POST
@Path("/some")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public JsonResponse login(@FormParam("some1") String some1, @Context HttpServletRequest request, @ ( Read more... )

Leave a comment

Comments 10

dimaby1 August 6 2013, 12:54:00 UTC
у меня это выглядит как-то так

@PreAuthorize("isAuthenticated()")
@RequestMapping(method = RequestMethod.GET)
public String all(Model model, Principal principal)
{
User user = userService.findByLoginOrEmail(principal.getName());
...

Но, для вас это наверное тоже полумера. Но по-моему spring security нигде не хранит конкретно ваш domain объект юзера так как он ему (спрингу) особо и не нужен.

Reply

hedin August 6 2013, 13:36:19 UTC
Да полумера.

User user = userService.findByLoginOrEmail(principal.getName());
Вот от этого то я и хочу избавиться в первую очередь.

Но кстати тоже улучшение ... спасибо ... а это jersey или spring webflow?

Reply

dimaby1 August 6 2013, 13:41:14 UTC
Если честно, я как-то не вдавался в подробности, что за это отвечает - spring mvc или spring security

Reply


ext_1774656 August 7 2013, 06:55:10 UTC
можно просто взять и заделать собственную аннотацию

Reply

hedin August 7 2013, 07:13:42 UTC
Понимаю, но хотелось халявы.

Reply


hedin August 8 2013, 09:40:32 UTC
не ...

Я уже понял что могу положить своего юзера в UserDetails имплементацию принципала.
Но это же кастить принципала и тащить из него юзера !в каждом методе!.

Мне хотелось получить совсем готовое чтоб ни одного стейтмента не фигать об этом в фактически бизнес методе.

Странно что никто из этих зверей не догадался такое сделать.

Reply

e_v_ches August 8 2013, 15:21:31 UTC
Я в spring mvc сделал юзера модельным атрибутом, и втыкал его в нужные методы аннотацией. Я нифига не понял вопрос в оп-посте, потому что там видимо какой-то другой фреймворк, плюс спринг секурити, но сейчас поищу код...

в контроллере:

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

hedin August 8 2013, 18:50:47 UTC
O! тошонадо!

попробую поискать в ентом джерси аналог. Спасибо.

Reply


c0s August 10 2013, 13:08:46 UTC
мы в своём проекте предусмотрели интерфейс CurrentUserInfo, имплементации которого "вручную" работают с SecurityContextHolder, но полностью инкапсулируя всю чёрную работу, включая преобразования типов

сам же интерфейс просто инъектится везде, где нужно, на уровне объекта (а не метода, как в вопросе), и с помощью его методов можно сразу и авторизацией заниматься, и всякую информацию про пользователя узнавать, и preferences его менять, и пароль и т.п.

у нас предусмотрено несколько реализаций интерфейса, т.к. в разных приложениях проекта используются разные хранилища пользовательских учёток со своими особенностями модели представления данных

Reply


Leave a comment

Up