Проверьте, работает ли LDAP-соединение Python
В наших приложениях на работе у нас есть сервер CAS для аутентификации, а затем мы храним данные о пользователе, которых мы хотели бы получить с сервера LDAP. Для облегчения этого у нас есть обычай backends.py
с нашим собственным бэкэндом для аутентификации. Этот бэкэнд расширяет бэкэнд Django-CAS. Чтобы не приходилось переподключаться к серверу 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()
Тогда мой вопрос, есть ли лучший способ сделать это? Я понимаю, что это работает, но это означает, что каждый раз, когда я делаю это, я должен запускать поиск дважды (или я полагаю, что я мог бы использовать данные, полученные в любом случае...) Независимо от того, я чувствую, что это хакерская, где в Чтобы увидеть, если соединение не будет работать, я try
затем исправьте это, если это не пошло. Есть ли способ лучше?