某些服务调用的Resteasy通用QueryParams

|| 我正在使用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中。 有没有办法做到这一点? 提前致谢。     
已邀请:
我有同样的情况。很抱歉要恢复旧线程,但是无论如何... 与其将票证放在查询字符串上,不如将其作为HTTP标头,尤其是像这样的Authorization标头包括在内:
Authorization: Token ABCD1234-1234-1234-1234-ABCD1234ABCD
您也可以接受基本身份验证。这使您可以从网络浏览器中使用该API,而无需使用任何精美的插件或扩展程序。标题看起来像这样:
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
然后,在服务器端代码中,使用HttpServletFilter来保护对RestEasyServlet的所有访问。在doFilter方法中,读取Authorization标头。如果标头签出,则仅调用chain.doFilter(它将把请求传递给RestEasyServlet)。如果不存在,过期或无效等,则从您的过滤器返回HTTP 401。 如果您的auth标头以\“ Token \”开头,请剥离前六个字符,然后获取其余值,并在会话数据库表或Map中进行查找。如果它在里面并且没有过期,请让他们通过。 如果您的auth标头以\“ Basic \”开头,请剥离前六个字符,然后Base64解码其余字符。在\“:\”上分割,并使用两个标记在数据库中查找用户。 我还在过滤器中作弊。由于无论如何我都必须从数据库中查找该令牌(或用户名/密码),因此我从ResultSet创建一个User对象,并将其存储在过滤器上的ThreadLocal中。然后,我在过滤器上提供了一个静态方法,让我可以从JVM中的其他任何位置访问“当前用户”。我在过滤器中使用try / finally清除ThreadLocal,以便在请求完成后始终将其清除。     
我认为您可以将@PathParams绑定到封闭的类,以便可以在每个方法中使用它们而无需重新声明。我从未尝试过,但是在这里看到了一个示例: http://www.mastertheboss.com/web-interfaces/309-handling-web-parameters-with-resteasy.html     

要回复问题请先登录注册