Wygodny Sposób Zabezpieczenia Sprężyny Wypełnionej Ziarnem Inżektora W Filtrze Serwletowym
November 27, 2021Warto zapoznać się z tymi poprawnymi metodami, jeśli otrzymujesz kod błędu Spring Inject Bean z powrotem do filtrów serwletów na swoim komputerze.
Zalecane: Fortect
Aby dać jasny obraz tego, jak papryczki chili można postrzegać w różnych kontekstach
Wiosną są tak naprawdę dwa rodzaje kontekstów
1. Root (kontekst załadowanego kontekstu oraz ContextLoaderListener)
2. Serwlet (załadowany kontekst pochodzący z DispatcherServlet)
Fasola zdefiniowana w RootContext Czy jest widoczny w ServletContext? – TAK
Komponenty zdefiniowane w całkowicie głównym kontekście są zawsze domyślnie widoczne przy użyciu wszystkich kontekstów apletów. Dostęp do możliwości komponentu dataSource bean wymienionego w kontekście Cheer można uzyskać tutaj w sformułowaniu serwletu, jak opisano poniżej.
@konfiguracjapublic .class .RootConfiguration ... ... ... ... - Fasola :. ... .public .DataSource .dataSource () :. ... ... ... ... -. ... ... .... @Budowa@ActiverWebMvc@ComponentScan (basePackages = "com.pvn.mvctiles")WebMvcConfigurer szeroko dostępne narzędzia do konfiguracji serwletów klas @Autowired najbardziej prywatne źródło danych DataSource; ...
Fasola zdefiniowana w kategoriach ServletContext jest widoczna w RootContext, na przykład Tak 6 .
applicationContext.getBeanDefinitionNames ();
2. Jeśli jakakolwiek osoba chce uzyskać dostęp do suchych ziaren z dala od kontekstu serwletu tylko w zestawieniu lub innym producencie serwletu, dodaj bazowy pakiet "org.springframework.web.servlet"
do klasy głównej . Konfiguracja / xml
@konfiguracja@ComponentScan (basePackages równa się „org.springframework.web.servlet”)Konfiguracja główna klas publicznych
Po dodaniu znajdziesz wszystkie główne komponenty wymienione poniżej z kontekstu planu
springSecurityConfig
, tileConfigurer
, themeSource
, themeResolver
, messageSource
, localeResolver
, requestMappingHandlerMapping
, mvcPathMatcher
, mvcUrlPathHelper
, mvcContentNegotiationManager
, viewControllerHandlerMapping
, beanNameHandlerMapping
, resourceHandlerMapping
, mvcResourceUrlProvider
, defaultServletHandlerMapping
, requestMappingHandlerAdapter
, mvcConversionService
, mvcValidator
, mvcUriComponentsContributor
, httpRequestHandlerAdapter
, simpleControllerHandlerAdapter
, handlerExceptionResolver
, mvcViewResolver
, mvcHandlerMappingIntrospector
Jeśli chcesz nabyć własne ziarna kakaowe w jednym konkretnym rootContext, dodaj podstawowy koszt pakietu, przeanalizuj składniki RootContext, jak opisano poniżej.
@konfiguracja@ComponentScan (basePackages równa się „com.your.configuration.package”, „org.springframework.web.servlet”)RootConfiguration Public College Class
Powyższa konfiguracja jest użyteczna w przypadku, gdy chcesz, aby wbudowane zauroczenie było dostępne w Twoim RootContext również w nowym, nowym filtrze serwletów. Na przykład, jeśli sądzisz, że wyjątek w filtrze i chcesz wysłać podobną odpowiedź na błąd, mimo że odpowiedź wydaje się być wysłana z HttpMessageConverter
, skonfigurowanego w ten sposób w servletContext, ludzie dzisiaj mogą chcieć użyć ten konwerter miksów do wysyłania wspólnego wezwania do działania…
@Autowiredprywatny ApplicationContext appContext;
Autowiring ApplicationContext nie wykonuje tego zadania w filtrze Servlet, ponieważ wydaje się, że filtry zostały zainicjowane przed zainicjowaniem kontenera Spring. (W zależności od zamówienia powiązanego z Twoim filtrem, również DelegatingProxyFilter)
klasa obywatelska YourFilter implementuje filtry prywatny ApplicationContext appContext; @ Zgnieść manifest void init (FilterConfig filterConfig) przeprowadza ServletException Filtr.super.init (konfiguracja filtra); appContext jest równa WebApplicationContextUtils.getRequiredWebApplicationContext (filterConfig.getServletContext ());
Mam nadzieję, że ogólnie istnieje jasna technika udostępniania roślin strączkowych między kontekstami.
(Dlaczego w * Tak)
1. Inicjalizacja kolejności rzeczy – rootCo firstntext i zaraz po tym servletContext.Podczas inicjowania rootContext ja. H. wokół większości klas konfiguracji kontekstu root / xml, jeśli kiedykolwiek spróbujesz wyraźnie przeliterować veg w swoim servletContext, zwykle szuka się wartości NULL. (ponieważ typ servletContext nie jest jeszcze zainicjowany, możemy więc powiedzieć, że obszary espresso nie są widoczne / zapisywane wokół rootContext podczas inicjalizacji)
Ale każdy może zdefiniować ziarna tutaj w servletContext po inicjalizacji servletContext (można przejąć ziarna poprzez kontekst aplikacji)
Użyj
WebApplicationContextUtils
:odeprzeć publiczną inicjalizację (FilterConfig cfg) ctx ApplicationContext = WebApplicationContextUtils .getRequiredWebApplicationContext (cfg.getServletContext ()); this.bean będzie oznaczać ctx.getBean (YourBeanType.class);
Dzięki
DelegatingFilterProxy
Twoja mapa biznesowa, która może filtrować do określonej deklaracji filtra podczas bean. Przypisujący serwer proxy po prostu wywołuje wszystkie kawy, które uruchamiają interfejsFiltr
.Użyj
@Configurable
dla swojego bloku. Wolałbym jednak jedną z dwóch pozostałych opcji. (Ten wybór może wykorzystać splot Aspect J)
Bean
UsersConnectionRepository oznacza (UsersConnectionRepository) WebApplicationContextUtils. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean ("usersConnectionRepository");
Gdzie usersConnectionRepository
jest prawdopodobnie konkretną nazwą/identyfikatorem warzyw w kontekście aplikacji. Albo jeszcze lepiej:
UsersConnectionRepository-Bean WebApplicationContextUtils =. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean (UsersConnectionRepository.class);
publiczny void init (FilterConfig cfg) super.init (cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (to);
Następnie @wstrzyknij tylko swój rdzeń kawy do tego filtra, taka sama ewentualność, jak w przypadku innych osób, które prawdopodobnie wstrzykną.
@InjectArchiwum prywatne UsersConnectionRepository;
DelegowanieFilterProxy może być używane jako proxy dla jednego konkretnego ogólnego filtru Servlet.
DelegatingFilterProxy sam w sobie jest również funkcjonalnym filtrem serwletów, który deleguje do jednego z wymienionych ziaren zarządzanych przez Spring, który implementuje rodzaj interfejsu filtrowania.
Potrzebujemy miejsca, dla którego powiedziałbym, że właściwość targetBeanName DelegatingFilterProxy to nazwa docelowego ziarna (ziarna, które implementuje interfejs selekcji).
Przykład
Filtry serwletów do warzyw
@Component ("myTestFilter")Ogólny kurs MyFilter wdraża filtry @Autowired MyService myService prywatny; @ Zgnieść Oficjalne wyniki inicjalizacji wycofania (FilterConfig filterConfig) ServletException w Crush public gap doFilter (ServletRequest, ServletResponse, Łańcuch filtracyjny) rzuca IOException, ServletException System.out.println ("- W MyFilter -"); HttpServletRequest dopasowuje żądanie żądania (HttpServletRequest); mojaUsługa.doCoś (wymagane); .DoFilter ciąg (żądanie, odpowiedź); @ Zgnieść publicznie niszcz niepotrzebnie ()
Klasa konfiguracji Java
@EnableWebMvc@Budowa@ComponentScanlekcje publiczne MyWebConfig
Zapisz DelegatingFilterProxy
Zalecane: Fortect
Czy masz dość powolnego działania komputera? Czy jest pełen wirusów i złośliwego oprogramowania? Nie obawiaj się, przyjacielu, ponieważ Fortect jest tutaj, aby uratować sytuację! To potężne narzędzie jest przeznaczone do diagnozowania i naprawiania wszelkiego rodzaju problemów z systemem Windows, jednocześnie zwiększając wydajność, optymalizując pamięć i utrzymując komputer jak nowy. Więc nie czekaj dłużej — pobierz Fortect już dziś!
rozszerzone grupowanie publiczne AppInitializer AbstractAnnotationConfigDispatcherServletInitializer ............. @ Zgnieść filtr liniowy [] getServletFilters () DelegatingFilterProxy filterProxy odpowiada nowemu DelegatingFilterProxy (); filterProxy.setTargetBeanName ("mójFiltrTestowy"); nowy usuń [] powtórz filtr proxy; .............
Kontroler
Zakończ
V
- MyFilter--W MyService: / aplikacja- Obsługę żądania robi kontroler -
Przykładowy projekt
- spring-webmvc 4.3.9.RELEASE: Spring Web MVC.
- Spring-Test 4.3.9.RELEASE: Spring TestContext Framework.
- javax.servletapi 3.1.0 Java Servlet API.
- junit 4.12: JUnit to kompletny framework do testowania Javy stworzony przez Ericha Gammę i Kenta Becka.
- JDK 1.8
- Maven 3.3.9
Spring Inject Bean Into Servlet Filter
Lente Injecteer Boon In Servletfilter
서블릿 필터에 스프링 인젝트 빈
Primavera Inyectar Frijol En El Filtro De Servlet
Primavera Injetar Feijao No Filtro Servlet
Spring Vvodit Bean Komponent V Filtr Servleta
Fruhlingsinjektionsbohnen In Servlet Filter
Fjaderinjicera Bonan I Servletfiltret
Le Ressort Injecte Le Haricot Dans Le Filtre De Servlet
La Molla Inietta Il Fagiolo Nel Filtro Servlet