Проверьте, работает ли 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 затем исправьте это, если это не пошло. Есть ли способ лучше?

0 ответов

Другие вопросы по тегам