【发布时间】:2014-02-19 15:37:47
【问题描述】:
我正在实现一个自定义身份验证提供程序,它必须对用户进行身份验证和授权(通过一次性令牌/密码)。为此目的已经有一个服务器,并且我们已经提供了一个客户端 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
我想要实现的是要么使用原始客户端 API 类作为 bean,要么使用虚拟 bean 将虚拟数据透明地返回给使用任一实现的类。
类似
public MyAuthenticationProvider
@Autowired
private ClientAPI clientApi
如何做到这一点?
【问题讨论】:
-
您使用的是什么版本的 Spring?还有,Spring Java Config 还是 XML?
-
Spring 3.2.4.RELEASE,XML 配置
标签: java spring spring-aop spring-ioc