我正在实现一个自定义身份验证提供程序,它必须对用户进行身份验证和授权(通过一次性令牌/密码)。为此目的已经有一个服务器,我们已经提供了一个客户端API,可以在我们的应用程序中用于调用此身份验证/授权服务器。
由于商业原因,我们可以在我们的测试环境中复制该认证服务器的测试设置,因此我们必须在部署到我们的环境时以某种方式模拟此客户端API,而在我们交付给客户时使用实际的impl。我很难创建一种将此客户端API作为bean注入我的spring应用程序的简洁方法
它们提供的客户端API本质上是一个包含公共类(没有接口)和一些公共静态方法的包JAR,没有可用于注入此客户端API或虚拟实现的接口。
这是我打算做的事情
创建一个界面
public interface ClientAPIWrapper {
}
然后注入它的diff实现
即。
public class DummyClientApiBean implements ClientAPIWrapper
和
public class ClientApiBean extends ClientAPI implements ClientAPIWrapper
但后来我意识到注入此接口的类型将不允许访问原始客户端API类的方法
@Autowired
private ClientAPIWrapper clientApiBean
我想要实现的是使用原始的Client API类作为bean或虚拟bean使用任一实现透明地向类返回虚拟数据。
类似
public MyAuthenticationProvider
@Autowired
private ClientAPI clientApi
如何实现这个目标?
答案 0 :(得分:4)
这里的问题是API只包含静态方法(如果我能正确理解你的问题)。最干净的解决方案(但仍然很丑陋)是使用非静态方法为API和一个Facade类编写一个接口,该方法委托给真正的API。对于模拟,创建接口的第二个实现。