Nano Hash - криптовалюты, майнинг, программирование

Доступ к компонентам Spring из фильтров и тегов сервлета

Я могу получить доступ к компонентам Spring в своих сервлетах, используя

WebApplicationContext springContext = 
    WebApplicationContextUtils.getWebApplicationContext(getServletContext()); 

в методе сервлета init.

Мне было интересно, есть ли эквивалент WebApplicationContext для фильтров сервлетов? Кроме того, можно ли получить доступ к компонентам Spring в классе тегов?


Ответы:


1

Для фильтров - используйте Filter.init():

public void init(FilterConfig config) {
    WebApplicationContext springContext = 
        WebApplicationContextUtils.getWebApplicationContext(config.getServletContext());
}

Для тегов используйте TagSupport.pageContext (обратите внимание, что он недоступен в SimpleTagSupport):

WebApplicationContext springContext = 
    WebApplicationContextUtils.getWebApplicationContext(pageContext.getServletContext());
10.03.2010
  • Чувствую, что задам глупый или очевидный вопрос (хотелось бы сейчас потратить время на его поиски), но все равно задам: будет ли контекст всегда (при каждом запуске) готов в инициализации фильтра метод? Независимо от ответа, доказуемая аргументация приветствуется. Спасибо 23.09.2014
  • @niconic: Контекст приложения инициализируется ContextLoaderListener, и все слушатели контекста сервлета вызываются до инициализации Filter, согласно Спецификации API сервлета 3.0, раздел 10.12 Развертывание веб-приложения. 23.09.2014
  • axtavt, Отлично, именно то, что я искал, большое спасибо 24.09.2014
  • Это решение ломает парадигму IOC. Лучшим решением является использование DelegatingFilterProxy. 13.03.2016
  • Похоже, это решение больше не работает. В фильтрах getWebApplicationContext возвращает значение null. 04.05.2016

  • 2

    вы можете использовать DelegatingFilterProxy, как указано в документации Spring: http://static.springsource.org/spring-security/site/docs/3.0.x/reference/security-filter-chain.html#delegating-filter-proxy

    Вам просто нужно объявить свой настоящий компонент фильтра с тем же именем компонента, что и имя фильтра, объявленное в web.xml:

    веб.xml:

        <filter>
           <filter-name>SpringTestFilter</filter-name>
           <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        </filter>
    
        <filter-mapping>
           <filter-name>SpringTestFilter</filter-name>
           <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    приложениеContext.xml:

        <bean id="SpringTestFilter" class="com.company.app.servlet.SpringTestFilter" />  
    
    22.07.2010
  • Есть ли пример того, как это достигается с помощью конфигурации Java без файла src web.xml? 20.08.2014

  • 3

    Есть несколько способов получить его

    1. WebApplicationContext springContext = WebApplicationContextUtils.getWebApplicationContext(getFilterCongig().getServletContext());

    2. WebApplicationContext springContext = RequestContextUtils.getWebApplicationContext(servletRequest)

    потом

    springContext.getBean("myBeanId");
    
    06.12.2011

    4

    Вы можете поместить все свои bean-компоненты в качестве атрибутов запроса, используя ContextEsposingHttpServletRequest оболочка.

    10.03.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..