客户端单个位置的GWT ::进程服务器错误

时间:2012-10-16 20:49:39

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

可以使用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);
    }
}

基本上,这是做一些与安全相关的东西的理想场所,比如检查用户是否经过身份验证。我需要确保用户在服务器的任何请求上进行身份验证。所以一般情况下我会添加方法 validateUser ,它将返回true / false或抛出异常。此方法将在上面代码中的 processCall 中调用。

现在的问题是 - 如何在客户端处理此身份验证响应?我想将其置于单一地点,并确保默认情况下任何服务都将启用此用户验证。必须“保护”任何新服务,而不添加任何与安全相关的代码。因此,不要在“onFailure”方法或类似的东西中复制/粘贴此代码。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

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

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

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