How to set and check cookies wih JAX-RS?

后端 未结 1 849

I am a noobie with RESTful API and I am trying to build a Login service in which I provide an email and password and if the validation is successful - to store a cookie. In

1条回答
  •  一生所求
    2020-12-14 02:09

    You can do the following:

    • To store a new cookie:

      @GET
      @Path("/login")
      @Produces(MediaType.TEXT_PLAIN)
      public Response login() {
          NewCookie cookie = new NewCookie("name", "123");
          return Response.ok("OK").cookie(cookie).build();
      }
      
    • To retrieve the 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();
          }
      }
      

      However, you may only want the value:

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

    By the way, you may want to try the following code:

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

    This removes the cookie in the browser. The behavior depends on the implementation of JAX-RS. With RESTEasy (JBoss AS 7.0) and Google Chrome works fine.

    0 讨论(0)
提交回复
热议问题