1

我目前正在构建针对 kerberos 域控制器对用户进行身份验证的休息服务。由于每次用户尝试在系统中执行操作时戳 KDC 非常耗时,因此我有一个缓存,用于存储身份验证令牌及其相关主体。

所以基本上,我的服务提供两种身份验证方案:Kerberos 和令牌。我遇到的问题是我的缓存对象(在我的 DI 容器中限定为单例)在应用程序池被回收时丢失了。此外,即使应用程序池没有被回收,这种行为也会阻止我将我的服务分发到多个服务器上。

如何在应用程序池中保留我的缓存对象?

4

1 回答 1

1

通过回收应用程序池,您实际上是在终止应用程序并从头开始。与任何标准应用程序一样,有几种方法可以跨应用程序实例保存数据:

1) 在 KDC 之上添加一个身份验证层。在可以从您的主服务调用的不同应用程序池中创建另一个服务。如果新的应用程序池被回收,您仍然会遇到同样的问题,但回收的条件应该特定于用户的身份验证和服务器的状态。

2) 将对象保存在您自己的数据库或文件系统中。如果在身份验证后序列化对象,则可以将对象持久保存在本地存储中,这可能比访问 KDC 控制器更便宜。

于 2015-03-11T18:46:43.977 回答