我正在实现一个自定义身份验证提供程序,它必须对用户进行身份验证和授权(通过一次性令牌/密码)。为此目的已经有一个服务器,并且我们已经提供了一个客户端 API 以在我们的应用程序中用于调用此身份验证/授权服务器。
出于商业原因,我们被允许在我们的测试环境中复制该身份验证服务器的测试设置,因此当我们部署到我们的环境时,我们必须以某种方式模拟这个客户端 API,而当我们交付给客户时使用实际的 impl。我被困在创建一种干净的方式来将此客户端 API 作为 bean 注入我的 Spring 应用程序
他们提供的客户端 API 本质上是一个带有公共类(无接口)和一些公共静态方法的单个包 JAR,我没有可以用来注入此客户端 API 或虚拟实现的接口。
这就是我打算做的
创建接口
public interface ClientAPIWrapper {
}
然后注入它的差异实现
IE
public class DummyClientApiBean implements ClientAPIWrapper
和
public class ClientApiBean extends ClientAPI implements ClientAPIWrapper
但后来我意识到注入这种接口的类型将不允许访问原始客户端 API 类的方法
@Autowired
private ClientAPIWrapper clientApiBean
我想要实现的是使用原始客户端 API 类作为 bean 或虚拟 bean 将虚拟数据透明地返回给使用任一实现的类。
就像是
public MyAuthenticationProvider
@Autowired
private ClientAPI clientApi
如何做到这一点?