2015-01-17 12 views
16

Jestem noobie z RESTful API i staram się zbudować usługę logowania, w której podam adres e-mail i hasło, a jeśli walidacja się powiedzie - do zapisania pliku cookie. Ponadto, w jaki sposób mogę sprawdzić plik cookie (jeśli jest przechowywany)?Jak ustawić i sprawdzić pliki cookie za pomocą JAX-RS?

Jak można to osiągnąć?

@Path("/login") 
@POST 
@Produces(MediaType.APPLICATION_JSON) 
@Consumes({MediaType.APPLICATION_FORM_URLENCODED, MediaType.APPLICATION_JSON}) 
public Response Login(final String i_LoginDetails) throws JSONException { 
    final JSONObject obj = new JSONObject(i_LoginDetails); 
    try { 
     if (isValidUser(obj.getString("email"), obj.getString("password"))) { 
      // Set a cookie 
     } else { 
      // return error invalid-credentials message 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return Response.ok("TEST").build(); 
} 

A jak mogę sprawdzić plik cookie (jeśli jest ustawiony)?

Odpowiedz

27

można wykonać następujące czynności:

  • Aby zapisać nowy plik cookie:

    @GET 
    @Path("/login") 
    @Produces(MediaType.TEXT_PLAIN) 
    public Response login() { 
        NewCookie cookie = new NewCookie("name", "123"); 
        return Response.ok("OK").cookie(cookie).build(); 
    } 
    
  • Aby pobrać plik cookie (javax.ws.rs.core.Cookie):

    @GET 
    @Path("/foo") 
    @Produces(MediaType.TEXT_PLAIN) 
    public Response foo(@CookieParam("name") Cookie cookie) { 
        if (cookie == null) { 
         return Response.serverError().entity("ERROR").build(); 
        } else { 
         return Response.ok(cookie.getValue()).build(); 
        } 
    } 
    

    Jednak może tylko chcesz wartość:

    @GET 
    @Path("/foo") 
    @Produces(MediaType.TEXT_PLAIN) 
    public Response foo(@CookieParam("name") String value) { 
        System.out.println(value); 
        if (value == null) { 
         return Response.serverError().entity("ERROR").build(); 
        } else { 
         return Response.ok(value).build(); 
        } 
    } 
    

Przy okazji, może chcesz spróbować następujący kod:

@GET 
@Path("/logout") 
@Produces(MediaType.TEXT_PLAIN) 
public Response logout(@CookieParam("name") Cookie cookie) { 
    if (cookie != null) { 
     NewCookie newCookie = new NewCookie(cookie, null, 0, false); 
     return Response.ok("OK").cookie(newCookie).build(); 
    } 
    return Response.ok("OK - No session").build(); 
} 

Usuwa cookie w przeglądarce. Zachowanie zależy od implementacji JAX-RS. Z RESTEasy (JBoss AS 7.0) i Google Chrome działa dobrze.

+0

Dziękuję za odpowiedź. Więc przed każdą usługą, którą wykonuję, powinienem użyć: if (cookie == null) { return Response.serverError(). Entity ("ERROR"). Build(); } else { // Wykonaj usługę } Jak wysłać cookieparam od klienta? – Gil404

+0

Zależy od oprogramowania klienta. Z jakiego klienta korzystasz? na przykład JQuery, 'HttpURLConnection', itp. –

+0

Obecnie testuję oba. – Gil404

Powiązane problemy