我目前正在构建针对kerberos域控制器对用户进行身份验证的休息服务。由于每次用户尝试在系统中执行操作时都会调用KDC非常耗时,因此我有一个缓存,其中存储了一个带有相关主体的身份验证令牌。
基本上,我的服务提供了两种身份验证方案:Kerberos和令牌。我遇到的问题是当应用程序池被回收时,我的缓存对象(在我的DI容器中作为单一格式)将丢失。此外,即使应用程序池未被回收,此行为也会阻止我通过多个服务器分发我的服务。
如何在应用程序池中保留缓存对象?
答案 0 :(得分:0)
通过回收应用程序池,您实际上是终止应用程序并从头开始。与任何标准应用程序一样,有几种方法可以跨应用程序的实例保存数据:
1)在KDC上添加身份验证层。在可以从主服务调用的其他应用程序池中创建另一个服务。如果新的应用程序池被回收,您仍然会遇到相同的问题,但要回收的条件应该特定于用户的身份验证和服务器的状态。
2)将对象保留在您自己或文件系统的数据库中。如果在身份验证后序列化对象,则可以在本地存储中保留对象,该对象可能比访问KDC控制器更便宜。