用于身份验证的GWT-RPC或RequestFactory?

时间:2013-12-02 18:28:30

标签: java authentication gwt gwt-rpc requestfactory

我正在尝试为我的GWT应用构建一个登录屏幕。单击登录按钮时,需要将凭据(用户名和密码)发送到服务器进行身份验证。我想知道什么样的服务器通信方法最适合这个:GWT-RPC或RequestFactory。

我的理解是RequestFactory比GWT-RPC更高效和推荐,但它更像是一个数据/实体/持久性框架,而不是像RPC这样的请求 - 响应框架。因此,虽然许多GWT afficionados建议使用RequestFactory而不是GWT-RPC,但我认为RequestFactory不能用于此场景。毕竟,我不想CRUD登录请求,我想将凭据发送到服务器,执行安全身份验证,并将响应返回给客户端。

  1. 我说错了吗? GWT-RPC是我唯一的选择吗?或
  2. 可以使用RequestFactory。如果是,如何(需要查看客户端和服务器代码的代码示例)?
  3. 提前致谢!

3 个答案:

答案 0 :(得分:2)

你可以使用其中任何一个,虽然RF与EntityProxy非常相似,但它也被认为与ValueProxy一起使用,这意味着传输任何类型。 RF有助于执行传递代理类型或原始类型的远程过程。

说,我会使用主要用于我的应用程序的技术。如果您使用RPC在RPC请求中发送您的登录名/密码,但如果您使用RF,请使用它,以便您不要混合使用,尽管您可以毫无问题地混合使用RF,RPC和普通Ajax。

您需要注意的是,通常情况下,在需要身份验证的应用程序中,您必须使用过滤器来检查用户在请求RPC或RF时是否具有有效会话,因此在发送登录请求时,你必须以某种方式跳过认证过滤器。

与安全性相关,两种方案都相同,您必须在启用https的环境中执行请求。

[编辑]

这可以是客户端的接口和远程实现登录的RF调用,因为您可以看到它非常简单,您可以添加这些类所需的任何方法:

@Service(value = LoginUserService.class)
public interface LoginUserRequest extends RequestContext {
  Request<Boolean> login(String username, String password);
}

public class LoginUserService {
   // Using static you dont need to provide a Locator for the service
   static Boolean login(String username, String password) {
      return true;
   }
}

与RF的auth过滤器相关,您可以查看:GWT RequestFactory authentication functions

答案 1 :(得分:1)

使用这两种技术,您可以将此类信息发送到服务器端,但正如您已经指出的那样,RequestFactory专用于实体管理。在你的情况下最好使用GWT-RPC,因为为了只发送凭证服务器端,并最终检索认证结果,你不需要RequestFactory剩余(delta传输,实体管理)。

答案 2 :(得分:0)

对于身份验证,我(几乎)总是使用RequestBuilder,即一个简单的HTTP(S!)POST。为什么?因为这种方式可以实现一般的身份验证机制,不仅可以由GWT应用程序使用。您可以灵活地添加简单的HTML登录页面,单点登录,标准服务器端机制(例如Spring安全性)等。

简单的GWT重新登录对话框对RequestBuilder也没有问题 - 只提交用户名/密码,GWT-RPC或RF根本就没有必要。