GWT RPC安全性,http头,身份验证和请求构建器

时间:2012-06-06 09:25:07

标签: java gwt authentication rest gwt-rpc

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

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

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

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

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

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

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

我是否正确地假设GWT RPC不安全友好/有效且我应该避免使用GWT RPC来进行安全的身份验证请求?

2 个答案:

答案 0 :(得分:6)

您可以让异步方法返回RequestRequestBuilder而不是voidRequest允许您abort()一个待处理的请求,而RequestBuilder允许您在发送请求之前修改请求(如果您将返回类型声明为RequestBuilder,那么您就是负责调用send()来实际提出请求。

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

答案 1 :(得分: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)对于服务器端,我会在调用Servlet之前实现AuthenticationFilter来检查头并执行服务器端auth函数。