【问题标题】:GWT :: process server errors in single place on client sideGWT :: 在客户端的单个位置处理服务器错误
【发布时间】:2012-10-16 20:49:39
【问题描述】:

可以使用具有 Guice 支持的特殊类型的处理程序定义单点请求处理,如下所示:

@Singleton
public class GuiceRemoteServiceServlet extends RemoteServiceServlet {
    @Inject
    private Injector injector;

    @Override
    public String processCall(String payload) throws SerializationException {
        RPCRequest req = RPC.decodeRequest(payload, null, this);

        RemoteService service = getServiceInstance(
                req.getMethod().getDeclaringClass());

        return RPC.invokeAndEncodeResponse(service, req.getMethod(),
                req.getParameters(), req.getSerializationPolicy());

    }

    @SuppressWarnings({"unchecked"})
    private RemoteService getServiceInstance(Class serviceClass) {
        return (RemoteService) injector.getInstance(serviceClass);
    }
}

基本上,这是做一些与安全相关的事情的理想场所,比如检查用户是否经过身份验证。我需要确保用户在 any request 对服务器的身份验证。所以一般我会添加方法validateUser,它会返回真/假或抛出异常。此方法将在上述代码中的 processCall 中调用。

现在的问题是 - 我如何在 客户端 处理此身份验证响应?我想把它放到一个地方,并确保任何服务都会默认启用此用户验证。任何新服务都必须是“安全的”而不添加任何与安全相关的代码。因此,不要在“onFailure”方法或类似方法中复制/粘贴此代码。

有什么想法吗?

【问题讨论】:

    标签: java security gwt exception-handling client-server


    【解决方案1】:

    如果您使用的是基本的 RPC 机制(例如不是gwtp),您可以创建一个抽象的 AsyncCallback 并实现 onFailure 方法来处理您的全局服务器故障。对于其他异常,您可以委托给调用者可以实现的其他方法。

    每次调用服务器时,只需使用这个新回调而不是 AsyncCallback。这也是一件好事,因为您现在不必每次都实现 onFailure 方法。

    RequestFactory 使用这个,Receiver 是抽象的,所以当你创建一个时,你只需要定义 onSuccess 方法。

    【讨论】:

    • 这很好,我决定走这条路——但是仅仅为了常见的异常处理而拥有另一个抽象类并不是什么好事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    相关资源
    最近更新 更多