Как удалить один фильтр из стека фильтра по умолчанию в Весенней безопасности?

Я должен исключить один фильтр по умолчанию из стека Spring Security. Таким образом, все фильтры должны работать, как обычно. Кажется, что я нахожу способ сделать так, сделать обычай FilterChainProxy:

public class CustomFilterChainProxy extends FilterChainProxy {

Logger LOGGER = Logger.getLogger(CustomFilterChainProxy.class);

public CustomFilterChainProxy() {
    super();
    LOGGER.debug("Run custom filter proxy");
    LOGGER.debug("String filters: " + this.toString());
}

public CustomFilterChainProxy(SecurityFilterChain chain) {
    super(chain);
    LOGGER.debug("Run custom filter proxy with chains");
}
}

Поскольку вы видите, что у него есть конструктор, которые получают список фильтров, таким образом, я буду в состоянии удалить один фильтр из цепи, поскольку мне нужно и все, что остальные будут работать, как обычно. Но я не могу сделать боб в конфигурации безопасности для такого конструктора. Если я использую


это, конечно, постройте объект с конструктором по умолчанию. Хорошо, я пытаюсь сделать боб со списком некоторых фильтров:



    
        
    


Но эта привычка собирает, вызывает BasicUserApprovalFilter, неизвестный боб. Таким образом, как я мог исключить один фильтр из стопки фильтра по умолчанию? Если мой путь с таможенным полномочием цепи фильтра - хорошее решение, поэтому как создают боб с цепью фильтра по умолчанию?

3
nl ja de

2 ответы

Вероятно, помогло бы, предоставили ли вы еще некоторую подробную информацию о том, что фильтр - вы, хотят удалить и почему.

If you wish, you can use a BeanPostProcessor to modify the filter chain after it has been created. In a default namespace configuration, you can give the filter chain created by the element a name:


   ...

Это регистрирует боб типа SecurityFilterChain с этим именем. FilterChainProxy создается из списка их.

Постпроцессор выглядел бы что-то как:

public class SecurityFilterChainPostProcessor implements BeanPostProcessor {

    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {

        if (beanName.equals("myFilterChain")) {
            DefaultSecurityFilterChain fc = (DefaultSecurityFilterChain)bean;
            List filters = fc.getFilters();

           //Modify the filter list as you choose here.                
            List newFilters = ...

            return new DefaultSecurityFilterChain(fc.getRequestMatcher(), newFilters);
        }

        return bean;
    }

    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}

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

Обновление

Вот связь с a реальный пример и его конфигурация.

4
добавлено
Конфигурация пространства имен полностью объяснена в справочнике и you' ll находят много примеров на ТАК. Признак "имени" только работает с 3.1 +, поэтому удостоверьтесь, что вы используете актуальную XML-схему (снова копируют примеры с руководства).
добавлено автор Shaun the Sheep, источник
Удаляя ExceptionTranslationFilter является плохой идеей. I' ve объявил об ответе в другой нити. Если вы don' t хотят использовать припрятавшие про запас запросы, просто формировать идентификацию, чтобы всегда использовать целевой URL по умолчанию.
добавлено автор Shaun the Sheep, источник
Проуспешно не без доступа к полному коду. Если вы размещаете его на GitHub, или где-нибудь я мог бы смотреть.
добавлено автор Shaun the Sheep, источник
I' ve добавил ссылку к реальному примеру, который добавляет фильтр к началу цепи. Это используется в настоящее время, так должен предоставить вам рабочий пример, который можно построить и экспериментировать с.
добавлено автор Shaun the Sheep, источник
У меня есть такая проблема: stackoverflow.com/questions/14019472/… И после долгого поиска я нашел, что тайник запроса, выполненный EXCEPTION_TRANSLATION_FILTER, поэтому как решение об этой проблеме с тайником, хочу исключить фильтр. Я могу описать еще немного о кэшировании проблемы, если это помогло бы весеннему проекту.
добавлено автор sphinks, источник
И, пожалуйста, покажите, как правильно определить , вызовите его didn' t работают над моей стороной (я просто добавляю эту последовательность и получаю ошибку: Недействительное содержание было найдено, начавшись с элемента ' http'.), кажется, что мне нужно более подробное руководство для добавления этого боба к моей конфигурации.
добавлено автор sphinks, источник
Люк, в другой нити, которую я написал, как я управлял с этим проблемами. Но только для меня, я просто хочу проверить этот интересный пример кода. Я осуществил его, как вы написали в петле, я передаю все элементы от фильтров до newFilters, кроме первого, добавляю, что некоторые сообщения отладки, но в регистрациях все еще запустили все 11 фильтров (но это должно быть только 10, вызвать, я удаляю один фильтр). Также нет никакого лесоруба (log4j) сообщений от этого новые требования. Чтобы видеть, что фильтр перечисляет, я использую ситуацию, что я описываю в другой нити (с получением старого запроса от тайника после того, как загружаются). Может сказать мне, что может быть неправильным?
добавлено автор sphinks, источник
Я могу издать свой config+implementation SecurityFilterChainPostProcessor, это будет достаточно?
добавлено автор sphinks, источник
Мне удалось управлять вами пример. Просто забудьте определение боба: <класс компонента = "ru.olekstra.backoffice.util. SecurityFilterChainPostPr‌ ​ ocessor"/>. Также удаление RequestCacheAwareFilter также помогает избежать проблемы. Также я добавляю подробное описание ошибки, смотрю на почту начала stackoverflow.com/questions/14019472/… Я считаю проблему решенной, но могу быть, это будет интересно для вас. Упал свободный попросить детали.
добавлено автор sphinks, источник

Можно определить вас собственная цепь фильтра с помощью <сильной> карты цепи фильтра признак в конфигурации SpringSecurity:


    
        
    

1
добавлено
Вы имеете <имя фильтра> springSecurityFilterChain в вашем web.xml для DelegatingFilterProxy? Вы используете элемент конфигурации?
добавлено автор Maksym Demidas, источник
Попытайтесь отладить DelegatingFilterProxy.initDelegate (...) метод. Это похоже в применении sturtup DelegatingFilterProxy, берет цепь фильтра по умолчанию, подготовленную элементом вместо таможенного.
добавлено автор Maksym Demidas, источник
Я не уверен, что можно использовать и таможенная цепь фильтра вместе. Для меня похоже, определяете ли вы свою таможенную цепь фильтра тогда, необходимо обеспечить остальную часть бобов, обеспеченных элементом вручную (см. этот пример, filterChainProxy и filterInvocationInterceptor бобы). Если вы, absolutelu хотят использовать элемент тогда, может быть лучше использовать решение с BeanPostProcessor, обеспеченным @Luke Тейлором
добавлено автор Maksym Demidas, источник
Я имею, пробуют этот вариант, но это кажется doens' t работа: Я оставил фильтры 7 фильтрами, как написал в списке, но в регистрации я вижу, что запустил все 11 фильтров по умолчанию: (FilterChainProxy.java:doFilter:318)/project/path в положении 1 11 в дополнительной цепи фильтра; увольнение Фильтра: ' SecurityContextPersistenceFilter'..., (FilterChainProxy.java:doFilter:318)/project/path в положении 11 11 в дополнительной цепи фильтра; увольнение Фильтра: ' FilterSecurityInterceptor'. таким образом, ничто не изменяется.
добавлено автор sphinks, источник
Да, у меня есть такой код: <имя фильтра> springSecurityFilterChain <класс фильтра> org.springframework.web.filter. DelegatingFilte‌ ​ rProxy в web.xml и использовании http элемент в весенней конфигурации безопасности.
добавлено автор sphinks, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Кибербезопасность АСУ ТП: RUSCADASEC Community
Кибербезопасность АСУ ТП: RUSCADASEC Community
1 389 участник(ов)

Группа открытого независимого сообщества специалистов по кибербезопасности АСУ ТП / RUSCADASEC для интерактивного обмена информацией по теме Подробнее: www.ruscadasec.ru Наш канал для основных новостей и материалов @RUSCADASECnews

Spring Framework and more
Spring Framework and more
839 участник(ов)

чат о spring framework и связанных с ним технологиях. We're discussing: job, tech questions, beer meet up/networking: tech review ,LinkedIn skills, SOF q/a raise up& etc. languages: russian,java,eng.

secinfosec
secinfosec
697 участник(ов)

Эта группа про информационную безопасность. Целевая аудитория: пентестеры, ресерчеры, ибшники всех мастей. Реклама, криминал, политика и прочая чушь карается родовыми проклятьями. Митапы: https://www.youtube.com/channel/UCagEjp1FmxY9gsVxi6_d4SQ

Linux Security
Linux Security
652 участник(ов)

Данная группа принципиально про безопасность и в частности про безопасность Linux. Прочие темы просим обсуждать в профильных чатах.

Chat Security / ИБач чат
Chat Security / ИБач чат
601 участник(ов)

Чат канала @ibach Обсуждение всего, что касается информационной безопасности Правила: https://t.me/chat_security/65

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async