Je suis un noobie avec l'API RESTful et j'essaie de créer un service de connexion dans lequel je fournis un e-mail et un mot de passe et si la validation réussit - pour stocker un cookie. De plus, comment puis-je vérifier le cookie (s'il est stocké)?
Comment cela peut il etre accompli?
@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();
}
Et comment puis-je vérifier le cookie (s'il est défini)?
Vous pouvez effectuer les opérations suivantes:
Pour stocker un nouveau cookie:
@GET
@Path("/login")
@Produces(MediaType.TEXT_PLAIN)
public Response login() {
NewCookie cookie = new NewCookie("name", "123");
return Response.ok("OK").cookie(cookie).build();
}
Pour récupérer le 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();
}
}
Cependant, vous ne souhaiterez peut-être que la valeur:
@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();
}
}
Au fait, vous voudrez peut-être essayer le code suivant:
@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();
}
Cela supprime le cookie dans le navigateur. Le comportement dépend de l'implémentation de JAX-RS. Avec RESTEasy (JBoss AS 7.0) et Google Chrome fonctionne bien.