在我们的应用程序中,我们有一个用于身份验证的CAS后端,然后我们存储有关我们想要从LDAP服务器检索的用户的数据。为方便起见,我们将自定义backends.py
与我们自己的后端进行身份验证。这个后端扩展了Django-CAS backend。每次我们将LDAP连接存储到类变量并查看是否存在时,都不必重新连接到LDAP服务器。如果是,那么我们重用那个。
if not hasattr(PopulatedCASBackend, 'ldap_server'):
PopulatedCASBackend.ldap_server = ldap.initialize(settings.LDAP_SERVER_URL)
PopulatedCASBackend.ldap_server.simple_bind_s()
我们已经发现,经过一段时间后,LDAP会认为此连接已死,并拒绝使用此连接。所以我决定在代码
中添加一个else语句else :
# we are trying to see if our current connection isn't stale. If it is, close it and remake
try :
user_data = ldap_server.search_s(
# all the correct params to search
)
except:
#connection is stale, so remake a new connection
PopulatedCASBackend.ldap_server.unbind_s()
PopulatedCASBackend.ldap_server = ldap.initialize(settings.LDAP_SERVER_URL)
PopulatedCASBackend.ldap_server.simple_bind_s()
我的问题是,有没有更好的方法来实现这一目标?我知道这有效,但这意味着每次我这样做我必须运行两次搜索(或者我想我可以使用从这种方式返回的数据......)无论如何,我觉得这是hackish,在哪里为了查看连接是否无法正常工作,我try
然后修复它,如果它没有去。还有更好的方法吗?