【问题标题】:How Can I Read Cookies Coming Back in the Response to a RESTEasy Client?如何读取响应 RESTEasy 客户端返回的 Cookie?
【发布时间】:2015-11-14 00:32:08
【问题描述】:

我正在使用 RESTEasy 代理客户端,并使用以下代码对其进行实例化。

final ResteasyClient client = new ResteasyClientBuilder().build();
final ResteasyWebTarget target = client.target(pUrl);
mClient = target.proxy(FooClientProxy.class);

FooClientProxy 是我的代理接口。

FooClientProxy定义了一个login方法,如下

@POST
@Path("/foo/login/{username}/{password}")
public abstract void login(@PathParam("username") String pUsername, @PathParam("password") String pPassword);

在使用mClient.login(pUsername, pPassword); 登录时,我想看看我在响应中返回了哪些cookie。

有没有办法可以询问代理客户端以读取响应中的 cookie?

【问题讨论】:

    标签: java rest cookies resteasy


    【解决方案1】:

    为什么你的登录方式是void?如果您要返回 Response,您可以像这样读取 Cookie:

    mClient = target.proxy(FooClientProxy.class);
    Response response = mClient.login(user, pw);
    NewCookie cookie = response.getCookies().get(cookieName);
    

    【讨论】:

    • 谢谢。这就是我所缺少的。我现在确实有另一个问题 - 当我阅读响应时,使用同一代理客户端的所有后续调用都失败,并出现我的连接仍然打开的错误。读取 Cookie 后关闭连接的安全方法是什么?
    • 当您从响应中阅读了您需要的所有内容时使用response.close(),当您不再请求时使用client.close()..
    【解决方案2】:

    我认为您可以在应该能够访问 cookie 的地方注入 HttpSession 请求:

    @POST
    public String someRestCall(Postdata postdata, @Context HttpServletRequest request) {
      System.out.println(request.getCookies());
    }
    

    分别为您的情况

    @POST
    @Path("/foo/login/{username}/{password}")
    public abstract void login(@PathParam("username") String pUsername, @PathParam("password") String pPassword,  @Context HttpServletRequest request);
    

    我不能 100% 确定,因为我不能在这里测试它,但我很确定 :-)

    【讨论】:

    • 谢谢。但我的代码在客户端。我正在使用 RESTEasy 客户端调用 REST 服务。在我的客户端中,我想查看服务器设置了哪些 cookie
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 2021-08-24
    • 2017-01-16
    • 2016-11-08
    • 2015-01-28
    相关资源
    最近更新 更多