2011-08-29 14 views
8

Estoy usando jersey jax-rs en myeclipse como back-end de mi proyecto y jsp como frontend. Quiero configurar cookies desde el servidor después de iniciar sesión correctamente. En el documento oficial del jersey, solo puedo encontrar cómo obtener galletas por jersey. ¿Alguien puede darme una demostración para hacer tales cosas?¿Cómo configurar cookies en Jersey?

Esta es mi parte de inicio de sesión y devuelvo una respuesta y me redirige a la URL "/", que significa 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(); 
    } 
} 

Este es mi "/" parte:

@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(); 
} 

Cada vez que ejecuta este código, me parece que no puedo conseguir la galleta de la parte de índice. Si alguna vez te molestaste con esta pregunta y finalmente la resolviste, por favor dame algunas indicaciones, gracias.

Respuesta

18

Para establecer la cookie en su ejemplo, se puede hacer algo como esto:

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

Pero si desea redirigir a "/" también tendría que volver 3xx respuesta en lugar de 200, por ejemplo, :

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

Por cierto, ¿sabes cómo limpiarlos (en jersey) cuando quiero desconectarme de mi sitio? – mons

+2

Intente establecer el máximo de la cookie en 0, usando 'Response.ok(). Cookie (new NewCookie (" nombre ", nulo, nulo, nulo, nulo, 0/* maxAge * /, falso)). Build() ' –

+0

Sí, estoy usando maxAge para" limpiarlos ". Me pregunto si hay otras formas, como el método xxx.clean() para limpiar las cookies. De todos modos, esta pregunta ya ha sido resuelta con éxito. Gracias por tu respuesta. Apreciar tu intercambio. – mons

Cuestiones relacionadas