Un Modo Semplice Per Fissare Un Grano Iniettore Ricco Di Molle In Un Filtro Servlet
December 6, 2021Vale la pena leggere questi metodi dovrebbero davvero avere se ricevi il codice di errore Spring Inject Bean sui filtri servlet sulla tua macchina.
Consigliato: Fortect
Per dare un’idea chiara di come i peperoncini possano essere visti in diversi contesti
In primavera, ci sono in genere due tipi di contesti
1. Root (contesto del contesto caricato semplicemente da ContextLoaderListener)
2. Servlet (contesto caricato direttamente da DispatcherServlet)
Bean definiti in RootContext visibili in ServletContext? – S
I componenti definiti nel contesto root completo sono sempre visibili per impostazione predefinita utilizzando tutti i contesti servlet. È possibile accedere alla funzionalità per il bean dataSource desiderata nel contesto Cheer qui nella prospettiva servlet come indicato di seguito.
@configurazionepublic .class .RootConfiguration ... ... ... ... da Bean :. ... .public .DataSource .dataSource () :. ... ... ... ... -. ... ... .... @Costruzione@ActiverWebMvc@ComponentScan (basePackages = "com.pvn.mvctiles")Strumenti di configurazione servlet di classe cliente WebMvcConfigurer @Autowired fonte dati personalizzata DataSource; ...
I fagioli definiti in termini di ServletContext sono visibili in RootContext, ad esempio Sì 6 .
applicationContext.getBeanDefinitionNames ();
2.Se la persona desidera accedere ai bean secchi come il contesto del servlet in una collation o in un’altra marca di servlet, aggiungere il pacchetto basesth "org.springframework.web.servlet"
alla classe principale. Configurazione / xml
@configurazione@ComponentScan (basePackages è uguale a "org.springframework.web.servlet")Classi pubbliche RootConfiguration
Una volta aggiunti, troverai tutti i componenti elencati di seguito dal contesto dell’elemento
springSecurityConfig
, tileConfigurer
, themeSource
, themeResolver
, messageSource
, localeResolver
, requestMappingHandlerMapping
, mvcPathMatcher
, mvcUrlPathHelper
, mvcContentNegotiationManager
, viewControllerHandlerMapping
, beanNameHandlerMapping
, resourceHandlerMapping
, mvcResourceUrlProvider
, defaultServletHandlerMapping
, requestMappingHandlerAdapter
, mvcConversionService
, mvcValidator
, mvcUriComponentsContributor
, httpRequestHandlerAdapter
, simpleControllerHandlerAdapter
, handlerExceptionResolver
, mvcViewResolver
, mvcHandlerMappingIntrospector
Se vuoi usare le tue fave di cacao in questo rootContext, aggiungi un pacchetto di base che valga davvero la pena analizzare i componenti RootContext come indicato di seguito.
@configurazione@ComponentScan (basePackages è uguale a "com.your.configuration.package", "org.springframework.web.servlet")RootConfiguration Public College Class
La configurazione di cui sopra è utile se si scopre che si desidera che la preoccupazione incorporata sia disponibile nel proprio RootContext disponibile anche nel filtro servlet più recente. Ad esempio, se ottieni un’eccezione in un filtro e inoltre desideri inviare la risposta di errore effettiva anche se la risposta sembra essere inviata da HttpMessageConverter
, d’altra parte configurato in questo modo in servletContext , gli studenti potrebbero voler utilizzare questo convertitore blend per inviare un problema condiviso…
@Autowiredprivato ApplicationContext appContext;
ApplicationContext Autowiring non fa il lavoro effettivo nel filtro Servlet e i filtri sembrano essere stati inizializzati solo di recente prima che il contenitore Spring venisse inizializzato. (A seconda dell’ordine relativo al tuo filtro, anche DelegatingProxyFilter)
classe di tribunale YourFilter implementa i filtri privato ApplicationContext appContext; @ Schiacciare manifest void init (FilterConfig filterConfig) conduce ServletException Filter.super.init (filterConfig); appContext è uguale a WebApplicationContextUtils.getRequiredWebApplicationContext (filterConfig.getServletContext ());
Spero che ci fosse una tecnica chiara per rendere disponibile il cacao tra i contesti.
(Perché in * Sì)
1. Inizializzazione dell’ordine degli scenari – rootCo firstntext e comunque servletContext.Quando si inizializza rootContext i. H. intorno a te vedi, la sessione di formazione sulla configurazione del contesto root / xml, se mai provassi a specificare veg nel tuo servletContext, probabilmente cercherebbe NULL. (dal momento che servletContext specifico non è ancora inizializzato, quindi posso davvero dire che le sfaccettature dell’espresso non sono visibili / salvate per rootContext durante l’inizializzazione)
Ma la tua azienda può definire i bean qui come parte di servletContext dopo l’inizializzazione di servletContext (puoi finire per essere bean attraverso il contesto dell’applicazione)
Usa
WebApplicationContextUtils
:evita l'inizializzazione pubblica (FilterConfig cfg) ApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext (cfg.getServletContext ()); this.bean si attacca per ctx.getBean (YourBeanType.class);
Con
DelegatingFilterProxy
, qualsiasi mappa di persona che può filtrare l’intera dichiarazione del filtro durante il bean. Il proxy di assegnazione chiama quindi semplicemente tutti i caffè che eseguono l’interfacciaFilter
.Usa
@Configurable
per il tuo blocco. Tuttavia, preferirei una delle altre due opzioni di una persona. (Questa scelta è per Aspect J weave)
Bean
UsersConnectionRepository significa (UsersConnectionRepository) WebApplicationContextUtils. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean ("usersConnectionRepository");
Dove usersConnectionRepository
è probabilmente il nome/ID esatto del tuo chicco di caffè per il contesto dell’applicazione. O più sano:
UsersConnectionRepository-Bean WebApplicationContextUtils =. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean (UsersConnectionRepository.class);
public void init (FilterConfig cfg) super.init (cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (questo);
Quindi @inietta solo i tuoi chicchi di caffè espresso principali in quel filtro, la stessa probabilità di qualsiasi altro chicco che la maggior parte delle persone probabilmente inietterebbe.
@InjectArchivio privato UsersConnectionRepository;
DelegatingFilterProxy può essere necessario utilizzare come proxy per un filtro Servlet generico.
Lo stesso DelegatingFilterProxy è anche un qualsiasi tipo di filtro servlet che delega a un bean gestito Spring selezionato che implementa diversi tipi di interfaccia di filtro.
Abbiamo bisogno di un posto per direi che la proprietà targetBeanName DelegatingFilterProxy sia il nome dei bean target (il bean che implementa l’interfaccia di selezione).
Esempio
implementazione di filtri servlet vegetali
@Component ("myTestFilter")Il corso MyFilter per la popolazione generale implementa i filtri @Autowired MyService myService privato; @ Schiacciare L'inizializzazione ufficiale del rollback (FilterConfig filterConfig) esegue ServletException a Crush vuoto pubblico doFilter (ServletRequest, ServletResponse, catena di filtri) genera IOException, ServletException System.out.println ("- In MyFilter -"); HttpServletRequest corrisponde a req inquire (HttpServletRequest); myService.doSomething (req); .DoFilter stringa (richiesta, risposta); @ Schiacciare distruggere pubblicamente inutilmente ()
Classe di configurazione Java
@EnableWebMvc@Costruzione@ComponentScanscuola pubblica MyWebConfig
Salva DelegatingFilterProxy
Consigliato: Fortect
Sei stanco del fatto che il tuo computer funzioni lentamente? È pieno di virus e malware? Non temere, amico mio, perché il Fortect è qui per salvare la situazione! Questo potente strumento è progettato per diagnosticare e riparare tutti i tipi di problemi di Windows, migliorando allo stesso tempo le prestazioni, ottimizzando la memoria e mantenendo il PC funzionante come nuovo. Quindi non aspettare oltre: scarica Fortect oggi!
classificazione pubblica estesa AppInitializer AbstractAnnotationConfigDispatcherServletInitializer ............. @ Schiacciare filtro discusso [] getServletFilters () DelegatingFilterProxy filterProxy è uguale a new DelegatingFilterProxy (); filterProxy.setTargetBeanName ("myTestFilter"); nuovo filtro out [] ripeti filtro proxy; .............
Controllore
Esci
V
- MyFilter--In MyService: / app- Gestire la richiesta per ultimo il controllore -
Progetto di esempio
- spring-webmvc 4.3.9.RELEASE: Spring Web MVC.
- Spring-Test 4.3.9.RELEASE: Spring TestContext Framework.
- javax.servlet-api 3.1.0 API Java Servlet.
- junit 4.12: JUnit è un affidabile framework di test Java creato da Erich Gamma e Kent Beck.
- JDK 1.8
- Maven 3.3.9
Spring Inject Bean Into Servlet Filter
Lente Injecteer Boon In Servletfilter
Wiosna Wstrzyknac Fasole Do Filtra Serwletowego
서블릿 필터에 스프링 인젝트 빈
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