GWT RPC 安全、http 标头、身份验证和 requestbuilder
Posted
技术标签:
【中文标题】GWT RPC 安全、http 标头、身份验证和 requestbuilder【英文标题】:GWT RPC security, http header, authentication and requestbuilder 【发布时间】:2012-06-06 09:25:07 【问题描述】:我假设 GWT RPC 实际上使用 RequestBuilder。
有没有办法提取我的 RPC 服务异步请求者使用的 RequestBuilder 实例?
其实,我的问题是,如何提取 RequestBuilder 实例以将身份验证令牌作为 http 标头插入?有没有办法在 RPC 服务请求中插入 http 头?
即使我可以在请求中插入一个 http 标头,那么如何告诉远程 servlet 期待该身份验证令牌?因此,事实上,GWT RPC 是否提供了一个安全认证框架?
我认为答案是否定的,或者至少不方便。我说的对吗?
我将 RestEasy 与 RestyGWT over SSL 结合使用,我们可以随时插入标题。顺便说一句,RestyGWT 构造它的请求以使用 RequestBuilder。
我的实际动机是比较 GWT RPC 和 GWT JAX-RS (RestyGWT + RestEasy) 之间的安全有效性。因此,如果您作为回答者,有一个替代的详细论述来比较 RPC 与直接使用 RequestBuilder 或 REST 的安全有效性(而不是直接回答这个问题),请随时详细说明。
我是否可以假设 GWT RPC 不安全/不有效,我应该避免将 GWT RPC 用于安全的经过身份验证的请求?
【问题讨论】:
【参考方案1】:您可以让您的异步方法返回Request
或RequestBuilder
而不是void
。 Request
允许您 abort()
挂起的请求,而 RequestBuilder
允许您在请求发送之前修改请求(如果您将返回类型声明为 RequestBuilder
,则您负责调用 send()
来实际提出请求)。
或者,您可以使用RpcRequestBuilder
为使用特定异步服务代理进行的每个调用自定义RequestBuilder
。
【讨论】:
【参考方案2】:据我所知,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 之前执行服务器端身份验证功能。
【讨论】:
从这里的坟墓开始,但你正在转换变量serviceInstance
。你真的应该铸造myService
吗?这是错字还是我遗漏了什么?以上是关于GWT RPC 安全、http 标头、身份验证和 requestbuilder的主要内容,如果未能解决你的问题,请参考以下文章
在 java 中使用 http 标头在 Spring Security 中传递基本身份验证详细信息
Spring security - 身份验证后的 GWT 重定向
对于 GWT GAE Java 应用程序,这种 GWT/RPC 安全方法的安全性如何?