2

我在使用 FIDO 设备为注册和登录网站的后端代码制作一个简单的 API 时遇到了一个小问题。

我基本上包装了 yubico u2f 库并使其更易于使用。我遇到的问题是异常,我想从我的 API 向后端服务器com.yubico.u2f.exceptions.NoEligableDevicesException抛出异常,但我不希望我的用户(后端开发人员)必须查看或导入 yubico 库。

因此,我的解决方案是像这样包装该异常:

package com.github.dkanellis.fikey.exceptions;

import com.yubico.u2f.data.DeviceRegistration;

public class NoEligableDevicesException extends com.yubico.u2f.exceptions.NoEligableDevicesException {
    public NoEligableDevicesException(Iterable<? extends DeviceRegistration> devices, String message, Throwable cause) {
        super(devices, message, cause);
    }

    public NoEligableDevicesException(Iterable<? extends DeviceRegistration> devices, String message) {
        super(devices, message);
    }
}

然后throw给用户我包装了 yubico 异常的异常。问题是这增加了我的代码的复杂性,并且每次com.yubico.u2f.exceptions.NoEligableDevicesException发生异常时我都必须捕获它并抛出com.github.dkanellis.fikey.exceptions.NoEligableDevicesException.

有一个更好的方法吗?

4

1 回答 1

1

问题是这增加了我的代码的复杂性,并且每次发生 com.yubico.u2f.exceptions.NoEligableDevicesException 异常时,我都必须捕获它并抛出 com.github.dkanellis.fikey.exceptions.NoEligableDevicesException。

这不是问题。这实际上是Exception在应用程序的不同层之间传播的推荐方式。我最近看到了这篇关于传播的优秀文章Exception。(这是一篇 .Net 文章,但仍适用于 Java)

将实际封装Exception到您自己的Exception子类中,您可以灵活地更改 API 的底层依赖项,而不会破坏客户端代码。客户端代码继续依赖于您的Exception子类。

于 2015-06-28T13:12:32.250 回答