Создание пользовательской аутентификации с безопасностью Acegi/Spring

Я думаю, что Пилинт не оправдывает это предупреждение правильно.

Обоснование на официальном документе

(возвращает итератор в Python 3)

blockquote>

подходит для итератора (например, map ) но не для диапазона.

Чтобы легко увидеть разницу между объектом iterator и объектом non-iterator, вы можете выполнить следующие строки

r = range(5)
print(list(r)) # [0, 1, 2, 3, 4]
print(list(r)) # [0, 1, 2, 3, 4]
m = map(int, '01234')
print(list(m)) # [0, 1, 2, 3, 4]
print(list(m)) # []

iterator потребляет элементы.

Однако я не думаю, что это хорошая практика, потому что у вас может возникнуть соблазн использовать его как список, который в некоторых случаях может быть медленнее.

давайте возьмем эти 2 примера.

r = range(500000)
l = list(r)

%%time
for i in range(200):
    for k in r:
        pass
# 6.7 sec on my computer

%%time
for i in range(200):
    for k in l:
        pass

# 4.5 sec on my computer

Основное различие заключается в том, что list загружаются в память, что позволяет быстрее выполнять итерации.

Редактировать: Если вы ищете скорость, вы можете использовать список, в противном случае, возможно, вам следует использовать диапазон.

Я открыл вопрос на Pylint ранее сегодня, если это стоит запроса на извлечение, я обработаю его позже

21
задан Rob Hruska 17 August 2010 в 22:16
поделиться

1 ответ

  1. Реализация пользовательского AuthenticationProvider , который получает всю вашу информацию аутентификации от Authentication : getCredentials () , getDetails () и getPrincipal () .

    Свяжите его с вашим механизмом аутентификации Spring Security, используя следующий фрагмент конфигурации:

<bean id="myAuthenticationProvider" class="com.example.MyAuthenticationProvider">
    <security:custom-authentication-provider />
</bean>
  1. Этот шаг не является обязательным, если вы можете найти подходящий из стандартные реализации. Если нет, реализуйте класс, расширяющий интерфейс Authentication , в который вы можете поместить свои параметры аутентификации:

     (например, идентификатор пользователя, метка времени, подпись и т. Д.)
    
  2. Расширить пользовательский SpringSecurityFilter , который связывает два вышеупомянутых класса вместе. Например, фильтр может получить AuthenticationManager и вызвать authenticate () , используя вашу реализацию Authentication в качестве входных данных.

    Вы можете расширить AbstractAuthenticationProcessingFilter как начало.

    Вы можете ссылаться на UsernamePasswordAuthenticationFilter , который расширяет AbstractAuthenticationProcessingFilter . UsernamePasswordAuthenticationFilter реализует стандартную аутентификацию по имени пользователя / паролю.

  3. Настройте Spring Security для добавления или замены стандартного AUTHENTICATION_PROCESSING_FILTER . Заказы Spring Security Filter см. В http://static.springsource.org/spring-security/site/docs/3.0. x / reference / ns-config.html # filter-stack

    Вот фрагмент конфигурации для того, чтобы заменить его вашей реализацией:

<beans:bean id="myFilter" class="com.example.MyAuthenticationFilter">
    <custom-filter position="AUTHENTICATION_PROCESSING_FILTER"/>
</beans:bean>
23
ответ дан 29 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: