我正在尝试为我的GWT应用构建一个登录屏幕。单击登录按钮时,需要将凭据(用户名和密码)发送到服务器进行身份验证。我想知道什么样的服务器通信方法最适合这个:GWT-RPC或RequestFactory。
我的理解是RequestFactory比GWT-RPC更高效和推荐,但它更像是一个数据/实体/持久性框架,而不是像RPC这样的请求 - 响应框架。因此,虽然许多GWT afficionados建议使用RequestFactory而不是GWT-RPC,但我认为RequestFactory不能用于此场景。毕竟,我不想CRUD登录请求,我想将凭据发送到服务器,执行安全身份验证,并将响应返回给客户端。
提前致谢!
答案 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根本就没有必要。