我在为使用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
。
有更好的方法吗?
答案 0 :(得分:1)
问题是这增加了我的代码的复杂性,每次发生com.yubico.u2f.exceptions.NoEligableDevicesException异常时我都要抓住它并抛出com.github.dkanellis.fikey.exceptions.NoEligableDevicesException。
这不是问题。这实际上是在应用程序的不同层之间传播Exception
的推荐方法。我最近发表了this关于宣传Exception
的精彩文章。 (它是.Net文章但仍适用于Java)
将实际的Exception
包装到您自己的Exception
子类中,您可以灵活地更改API的基础依赖项,而不会破坏客户端代码。客户端代码继续依赖于您的Exception
子类。