2013-08-09 30 views
8

Buduję aplikację przy użyciu App Engine z Jersey. Chciałbym skorzystać z adnotacji @RolesAllowed(Role_user), która pozwala utworzyć filtr w żądaniu.Jak zdobyć obiekt sesji w ContainerRequest do używania adnotacji @RolesAllowed (Role_user)?

Problem polega na tym, że musimy skonfigurować klasę SecurityContextFilter.

Moim celem jest pobranie id użytkownika przechowywanego w sesji, aby następnie sprawdzić jego rolę bezpośrednio w function : public ContainerRequest filter(ContainerRequest request) mojej klasy .

Potrzebuję wstrzyknąć HttpRequest, aby uzyskać sesję, ale po wstrzyknięciu otrzymuję wyjątek Java.lang.Null.

Chcę uzyskać obiekt sesji w klasie ContainerRequest.

Jak mogę to zrobić?

EDIT:

muszę znaleźć rozwiązanie tego problemu, ale nie wiem, czy to jest czysty: Można wstrzyknąć HttpRequest bezpośrednio w funkcji: isUserInRole (_role) więc używam tego i dostaję mój userId przez sesję, następnie dostaję rolę użytkownika i sprawdzam, czy pasuje do _role i zwraca true lub false.

+0

Myślę, że mam ten sam problem .. Próbujesz wstrzyknąć HttpRequest z @Context private HttpServletRequest httpRequest; .. dobrze? Próbowałem w ten sposób i httpRequest ma wartość zerową wewnątrz filtru –

+1

Tak! Dokładnie to próbuję zrobić! Ale nadal nie mam odpowiedzi. Jeśli masz rozwiązanie tego problemu, możesz mi powiedzieć, proszę. – FlavienBert

+0

nope .. Jeszcze nic nie znalazłem ... –

Odpowiedz

1

ja całkiem nie jestem pewien, czy można wstrzyknąć HttpServletRequest na górze ContainerRequestFilter w Jersey, ale nadal można to zrobić programowo Zamiast używać adnotacji:

@Override 
public ContainerRequest filter(ContainerRequest request) { 
    if(request.isUserInRole("SOME_ROLE")){ 
    //process some treatement 
    } 
    return request; 
} 

BR.