我假设GWT RPC实际上使用RequestBuilder。
有没有办法提取我的RPC服务异步请求者使用的RequestBuilder实例?
实际上,我的问题是,如何提取RequestBuilder实例以将身份验证令牌作为http头插入?有没有办法将http头插入到RPC服务请求中?
即使我可以将http头插入到请求中,远程servlet如何被告知等待该auth令牌呢?因此,实际上,GWT RPC是否提供了安全身份验证框架?
我认为答案是否定的,或者至少不是以一种方便的方式。我说的对吗?
我使用过RestEasy与RestyGWT over SSL相结合,我们可以在任何时候插入报头。顺便说一句,RestyGWT构造了使用RequestBuilder的请求。
我的实际动机是比较GWT和GWT RS (RestyGWT + RestEasy)之间的安全有效性。因此,如果您作为答复者,有其他详细的论述来比较RPC和直接使用RequestBuilder或REST (而不是直接回答这个问题)的安全有效性,请随时详细说明。
我假设GWT RPC不是安全友好的/有效的,我应该避免使用GWT RPC进行安全的身份验证请求,这是正确的吗?
发布于 2012-06-06 09:44:27
您可以让异步方法返回Request
或RequestBuilder
,而不是void
。Request
允许您返回挂起的请求,而RequestBuilder
允许您在请求发送之前修改请求(如果您将abort()
-type声明为RequestBuilder
,您将负责调用send()
来实际发出请求)。
或者,您可以使用RpcRequestBuilder
为使用特定异步服务代理进行的每个调用自定义RequestBuilder
。
发布于 2012-06-06 10:04:02
据我所知,目前还没有针对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之前执行服务器端身份验证函数。
https://stackoverflow.com/questions/10911462
复制