如图所示,我有三个演示应用程序A,B,C,它们展示了不同的休息服务。这些服务受基本身份验证的保护。不同的消费者可以通过基本身份验证来使用这些休息服务。
Spring安全配置是使用spring XML方法完成的,并且在内存中已应用了身份验证。 BCryptPasswordEncoder已被使用。该配置是无状态的。使用的Spring框架版本为4.3.22.RELEASE,使用的Spring安全性版本为4.2.11.RELEASE。
由于使用基本身份验证来保护其余服务会带来一些成本。所以下面是当我进行负载测试时,不同的演示应用程序在应用基本身份验证之前和之后给出响应所花费的时间。
应用程序B –线程数达到15000。
之前:-大约1毫秒。 之后:-大约30毫秒。
结果:-30毫秒是可以承受的成本,可以认为是不错的。
应用程序C –线程数达到3000。
之前:-大约28毫秒。 之后:-大约61毫秒。
结果:-61毫秒是可以承受的成本,可以认为是不错的。
应用程序A –线程数达到37000。
之前:-大约300毫秒。 之后:-大约13秒。
结果:-不可接受。响应时间从300毫秒增加到13秒。这可能是因为应用程序A内部调用了应用程序B和应用程序C,它们也受到基本身份验证的保护。 解决该问题的任何建议将不胜感激。
我可以尝试的一种解决方案。可以将应用程序A视为应用程序B和C的受信任方。可以将应用程序B和C配置为避免在来自应用程序A的请求时运行spring DelegatingFilterProxy。代替此,可以为来自应用程序A的请求配置另一个过滤器。通过匹配标头值和存储在Constant中的标头值,新的过滤器将检查基本身份验证凭据是否简单。