3

我假设 GWT RPC 实际上使用 RequestBuilder。

有没有办法提取我的 RPC 服务异步请求者使用的 RequestBuilder 实例?

实际上,我的问题是,如何提取 RequestBuilder 实例以将身份验证令牌作为 http 标头插入?有没有办法将 http 标头插入 RPC 服务请求?

即使我可以在请求中插入一个 http 标头,那么如何告诉远程 servlet 期望该身份验证令牌?因此,事实上,GWT RPC 是否提供了一个安全认证框架?

我认为答案是否定的,或者至少不是以一种方便的方式。我对吗?

我将 RestEasy 与通过 SSL 的 RestyGWT 结合使用,我们可以随时插入标题。顺便说一句,RestyGWT 构造它的请求以使用 RequestBuilder。

我的实际动机是比较 GWT RPC 和 GWT JAX-RS (RestyGWT + RestEasy) 之间的安全有效性。因此,如果您作为回答者有一个替代的详细论述,比较 RPC 与直接使用 RequestBuilder 或 REST 的安全有效性(而不是直接回答这个问题),请随时详细说明。

我是否可以假设 GWT RPC 不安全/不有效,我应该避免使用 GWT RPC 来进行安全的身份验证请求?

4

2 回答 2

6

您可以让您的异步方法返回 aRequest或 aRequestBuilder而不是void. Request允许您abort()处理待处理的请求,而RequestBuilder允许您在请求发送之前对其进行修改(如果您将返回类型声明为RequestBuilder,则您负责调用send()以实际发出请求)。

或者,您可以使用为使用特定异步服务代理进行的每个调用RpcRequestBuilder自定义。RequestBuilder

于 2012-06-06T09:44:26.743 回答
6

据我所知,gwt rpc 没有内置的安全解决方案。但如果我需要这样的身份验证,我会采取以下步骤:

1)为了能够设置http标头,您可以像我自己一样制作自定义请求构建器:

MyServiceAsync myService = GWT.create(MyService.class);
MyRequestBuilder myRequestBuilder = new MyRequestBuilder();
myRequestBuilder.addHeader("header", "value");
((ServiceDefTarget) serviceInstance).setRpcRequestBuilder(myRequestBuilder);

MyRequestBuilder 扩展了 RpcRequestBuilder。在 MyRequestBuilder 中,我覆盖了放置标题的方法 doFinish(RequestBuilder rb) 。

也许这不是一个超级解决方案,但我还没有找到更好的解决方案。

2)对于服务器端,我将实现 AuthenticationFilter 以检查标头并在调用 Servlet 之前执行服务器端身份验证功能。

于 2012-06-06T10:04:01.590 回答