2011-08-29 13 views
8

Używam jersey-ja w myeclipse jako zapleczu mojego projektu i jsp jako frontend. Chcę ustawić plik cookie z serwera po pomyślnym zalogowaniu. W oficjalnym dokumencie o koszulce mogę znaleźć tylko jak zdobyć ciasteczko po koszulce. Czy ktoś może dać mi demo, żeby robić takie rzeczy?Jak ustawić cookie w Jersey?

To jest moja część logowania i zwracam odpowiedź i przekierowuję do adresu URL "/", co oznacza index.jsp.

@Path("/login") 
@POST 
@Consumes("application/x-www-form-urlencoded") 
public Response login(@FormParam("email") String email, 
     @FormParam("password") String password) { 
    Map<String, Object> model = MapFactory.newHashMapInstance(); 
    model.put("email", email); 
    model.put("password", password); 
    loginCheck(model); 
    if (model.get("emailCheck").equals("ok") 
      && model.get("passwordCheck").equals("ok")) { 
     return Response.ok(
       new Viewable("/index", new NewCookie("name", 
         "Hello, world!"))).build(); 
    } else { 
     return Response.ok(new Viewable("/login", model)).build(); 
    } 
} 

To jest mój „/” część:

@GET 
@Produces("text/html") 
public Response getIndex(@CookieParam("name") String name) { 
    HashMap<String, Object> model = MapFactory.newHashMapInstance(); 
    model.put("name", name); 
    System.out.println("cookie name:\t" + name); 
    return Response.ok(new Viewable("/index", model)).build(); 
} 

każdym razem, kiedy uruchomić ten kod, uważam, że nie mogę dostać ciasteczko z części indeksu. Jeśli kiedykolwiek zadałeś sobie to pytanie i nareszcie go rozwiązałeś, daj mi wskazówki, dzięki.

Odpowiedz

18

Aby ustawić cookie w Twojej przykład, można zrobić coś takiego:

return Response.ok(new Viewable("/index", model)) 
       .cookie(new NewCookie("name", "Hello, world!")) 
       .build(); 

Ale jeśli chcesz przekierować do „/” będzie trzeba także zwrócić 3xx odpowiedzi zamiast 200, na przykład :

return Response.seeOther("/") 
       .cookie(new NewCookie("name", "Hello, world!")) 
       .build(); 
+0

Przy okazji, czy wiesz, jak je wyczyścić (w koszulce), gdy chcę się wylogować z mojej strony? – mons

+2

Spróbuj ustawić maxAge ciasteczka na 0, używając 'Response.ok(). Cookie (new NewCookie (" name ", null, null, null, null, 0/* maxAge * /, false)). Build() ' –

+0

Tak, używam maxAge do" czyszczenia "ich. Zastanawiam się tylko, czy istnieją inne sposoby, takie jak metoda xxx.clean() do czyszczenia plików cookie. W każdym razie, to pytanie zostało już pomyślnie rozwiązane. Dziękuję za odpowiedź. Doceń dzielenie się. – mons

Powiązane problemy