某些服务调用的Resteasy通用查询参数

某些服务调用的Resteasy通用查询参数,rest,resteasy,query-parameters,Rest,Resteasy,Query Parameters,我正在使用Resteasy的客户机框架,我有一些方法需要对服务器进行身份验证。身份验证是通过会话票证实现的,该票证必须作为查询参数包含在请求URL中。默认情况下,我需要将票据传递给我的所有服务呼叫,如下所示: @Path("/services") public class MyServiceClient { @POST @Path("service1") public void callService1(@QueryParam("ticket") String tick

我正在使用Resteasy的客户机框架,我有一些方法需要对服务器进行身份验证。身份验证是通过会话票证实现的,该票证必须作为查询参数包含在请求URL中。默认情况下,我需要将票据传递给我的所有服务呼叫,如下所示:

@Path("/services")
public class MyServiceClient {

    @POST
    @Path("service1")
    public void callService1(@QueryParam("ticket") String ticket);

    @GET
    @Path("service2")
    @Produces("text/plain")
    public String callService2(@QueryParam("ticket") String ticket, ...);
}
但我不想将ticket参数传递给我的每个服务调用。我需要一个解决方案,以一种通用的方式将其设置为每个调用的查询参数。因此,我的服务调用方法将只接受实际的服务参数,而不是票证。但是,当请求服务时,票证将包含在请求URL中

有办法做到这一点吗


提前感谢。

我认为您可以将@PathParams绑定到封闭类,这样就可以在每个方法中使用它们,而无需重新声明。我从未尝试过,但在这里看到了一个示例:
我也有同样的情况。很抱歉恢复了一个旧线程,但无论如何

与其将票据放在查询字符串上,为什么不将其作为HTTP头,特别是授权头包含,如下所示:

Authorization: Token ABCD1234-1234-1234-1234-ABCD1234ABCD
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
您也可以接受基本身份验证。这样,您就可以从web浏览器中使用API,而无需任何花哨的插件或扩展。标题如下所示:

Authorization: Token ABCD1234-1234-1234-1234-ABCD1234ABCD
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
然后,在服务器端代码中,使用HttpServletFilter来保护对RestEasyServlet的所有访问。在doFilter方法中,读取授权标头。如果报头签出,则只调用chain.doFilter(它将把请求传递给RestEasyServlet)。如果不存在、过期或无效等,则从过滤器返回HTTP 401

如果auth头以“Token”开头,则去掉前六个字符,然后获取其余的值,并在会话数据库表或映射中进行查找。如果它在那里并且没有过期,那么让他们通过

如果auth头以“Basic”开头,则去掉前六个字符,并对其余字符进行Base64解码。在“:”上拆分,并使用这两个令牌在数据库中查找用户


我的过滤器也有点作弊。由于我必须从数据库中查找该令牌(或用户名/密码),因此我从ResultSet创建了一个用户对象,并将其存储在过滤器上的ThreadLocal中。然后,我在过滤器上提供一个静态方法,让我从JVM中的任何其他地方访问“当前用户”。我在过滤器中使用try/finally清除ThreadLocal,以便在请求完成后始终将其清除。

哦,我刚刚注意到我犯了他们在我链接的页面上犯的相同错误,他们和你一样谈论@QueryParam,但提到了@PathParam。正如我所说,我没有尝试过,甚至没有在其他地方读到过,但我假设他们的错误是一个打字错误,这也适用于@QueryParam。