Я думаю, что Пилинт не оправдывает это предупреждение правильно.
Обоснование на официальном документе
(возвращает итератор в 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 ранее сегодня, если это стоит запроса на извлечение, я обработаю его позже
Реализация пользовательского AuthenticationProvider
, который получает всю вашу информацию аутентификации от Authentication
: getCredentials ()
, getDetails ()
и getPrincipal ()
.
Свяжите его с вашим механизмом аутентификации Spring Security, используя следующий фрагмент конфигурации:
<bean id="myAuthenticationProvider" class="com.example.MyAuthenticationProvider">
<security:custom-authentication-provider />
</bean>
Этот шаг не является обязательным, если вы можете найти подходящий из стандартные реализации. Если нет, реализуйте класс, расширяющий интерфейс Authentication
, в который вы можете поместить свои параметры аутентификации:
(например, идентификатор пользователя, метка времени, подпись и т. Д.)
Расширить пользовательский SpringSecurityFilter
, который связывает два вышеупомянутых класса вместе. Например, фильтр может получить AuthenticationManager
и вызвать authenticate ()
, используя вашу реализацию Authentication
в качестве входных данных.
Вы можете расширить AbstractAuthenticationProcessingFilter как начало.
Вы можете ссылаться на UsernamePasswordAuthenticationFilter , который расширяет AbstractAuthenticationProcessingFilter
. UsernamePasswordAuthenticationFilter
реализует стандартную аутентификацию по имени пользователя / паролю.
Настройте 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>