Een Zeer Gemakkelijke Manier Om Een verende Injectiekorrel In Een Servletfilter Te Bevestigen
November 27, 2021Het is de moeite waard deze verlichtingsmethoden te lezen als u een Spring Inject Bean-foutcode krijgt die in servletfilters op uw machine verschijnt.
Aanbevolen: Fortect
Om een duidelijk idee te geven van hoe chilipepers in verschillende contexten kunnen worden bekeken
In het voorjaar zijn er echt twee soorten contexten
1. Root (context van de context geladen volgens ContextLoaderListener)
2. Servlet (context geladen via DispatcherServlet)
Bonen gedefinieerd in RootContext Zichtbaar in ServletContext? – JA
Componenten die in de algemene rootcontext zijn gedefinieerd, zijn standaard altijd zichtbaar met alle servletcontexten. De mogelijkheid voor de dataSource-bean waarnaar in de Cheer-context wordt verwezen, kan hier gewoonlijk worden geopend in de servlet-betekenis zoals hieronder vermeld.
@configuratieopenbare .class .RootConfiguration ... ... ... ... - Boon :. ... .public .DataSource .dataSource () :. ... ... ... ... -. ... ... .... @Bouw@ActiverWebMvc@ComponentScan (basePackages = "com.pvn.mvctiles")WebMvcConfigurer klasse servlet configuratietools voor strafrechtelijke rechtbanken @Autowired n individuele gegevensbron DataSource; ...
Beans gedefinieerd in termen van ServletContext zijn zichtbaar in RootContext, bijvoorbeeld Ja 3 .
applicationContext.getBeanDefinitionNames ();
2.Als uw hele gezin toegang wil hebben tot droge bonen die zijn veroorzaakt door de context van de servlet in slechts een verzameling of een ander servlet-recordlabel, voegt u het basispakket "org.springframework.web.servlet"
toe aan de hoofdklasse. Configuratie / xml
@configuratie@ComponentScan (basePackages betekent "org.springframework.web.servlet")Hoofdconfiguratie openbare klassen
Eenmaal toegevoegd, vindt u hieronder alle specifieke componenten uit de context van het softwarepakket
springSecurityConfig
, tileConfigurer
, themeSource
, themeResolver
, messageSource
, localeResolver
, requestMappingHandlerMapping
, mvcPathMatcher
, mvcUrlPathHelper
, mvcContentNegotiationManager
, viewControllerHandlerMapping
, beanNameHandlerMapping
, resourceHandlerMapping
, mvcResourceUrlProvider
, defaultServletHandlerMapping
, requestMappingHandlerAdapter
, mvcConversionService
, mvcValidator
, mvcUriComponentsContributor
, httpRequestHandlerAdapter
, simpleControllerHandlerAdapter
, handlerExceptionResolver
, mvcViewResolver
, mvcHandlerMappingIntrospector
Als je je eigen cacaobonen wilt verkrijgen in de rootContext, voeg dan een basispakket toe dat de RootContext-componenten waard is, zoals hieronder beschreven.
@configuration@ComponentScan (basePackages is gelijk aan "com.your.configuration.package", "org.springframework.web.servlet")RootConfiguration Public College Class
De bovenstaande configuratie is handig waar je maar wilt, zodat de ingebedde fixatie beschikbaar is in je RootContext en daarnaast ook beschikbaar is in je andere servlet-filter. Als u bijvoorbeeld een uitzondering in een filter krijgt en u exact dezelfde foutreactie wilt verzenden, ook al is de reactie verzonden vanaf HttpMessageConverter
en op deze manier geconfigureerd in servletContext, kunnen klanten en prospects wil deze GRP Composite Converter gebruiken om een gedeelde automatische …
@Autowiredprivé ApplicationContext appContext;
ApplicationContext Autowiring doet uw huidige taak niet in het Servlet-filter, aangezien de filters onlangs lijken te zijn geïnitialiseerd voordat de Spring-container is geïnitialiseerd. (Afhankelijk van de volgorde van uw filter, ook DelegatingProxyFilter)
arrestatieklasse YourFilter implementeert filters privé ApplicationContext appContext; @ Verbrijzeling manifest void init (FilterConfig filterConfig) organiseert ServletException Filter.super.init (filterConfig); appContext betekent WebApplicationContextUtils.getRequiredWebApplicationContext (filterConfig.getServletContext ());
Ik hoop dat er een duidelijke techniek is om chili tussen contexten beschikbaar te maken.
(Waarom in * Ja)
1. Initialiseren van de volgorde van zorgen – rootCo firstntext en na servletContext.Bij het initialiseren van rootContext i. H. rond de eigenlijke root / xml-contextconfiguratieklassen, als je ooit probeert om veg duidelijk te spellen in je servletContext, zou het zeker naar NULL zoeken. (omdat ik zou zeggen dat de servletContext nog niet is geïnitialiseerd, dus nu kunnen we zeggen dat de espressostoffen niet zichtbaar zijn / worden opgeslagen door de rootContext te gebruiken tijdens de initialisatie)
Maar uw hele familie kan hier bonen definiëren voor servletContext na servletContext-initialisatie (u kunt bonen worden door toepassingscontext)
Gebruik
WebApplicationContextUtils
:gebruik geen openbare initialisatie (FilterConfig cfg) ApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext (cfg.getServletContext ()); this.bean zit voor ctx.getBean (YourBeanType.class);
Met
DelegatingFilterProxy
, een individuele kaart die tijdens bean kan filteren op een of andere filterdeclaratie. De toewijzende proxy roept dan eenvoudig alle chili aan die deFilter
-interface gebruiken.Gebruik
@Configurable
voor je blok. Ik zou echter de voorkeur geven aan een van de twee andere opties. (Deze keuze kan gebruik maken van Aspect J weave)
Bean
UsersConnectionRepository betekent (UsersConnectionRepository) WebApplicationContextUtils. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean ("usersConnectionRepository");
Waar usersConnectionRepository
waarschijnlijk de specifieke naam / ID van uw koffieboon is voor de toepassingscontext. Of groter:
UsersConnectionRepository-Bean WebApplicationContextUtils =. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean (UsersConnectionRepository.class);
public void init (FilterConfig cfg) super.init (cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (this);
Dan @injecteer alleen je kernkoffie in dat filter, dezelfde kans als voor elke andere boon die iemand waarschijnlijk zou injecteren.
@InjectPrivédatabase UsersConnectionRepository;
DelegatingFilterProxy kan eindigen als een proxy voor het eigenlijke generieke Servlet-filter.
De DelegatingFilterProxy zelf is ook een geweldige servlet-filter die delegeert naar een specifieke door Spring beheerde bean die een ander soort filterinterface implementeert.
We hebben een plaats nodig voor elk van onze targetBeanName DelegatingFilterProxy-eigenschap om een naam te zijn van de doelkoffieboon (de boon die de blokkeerinterface implementeert).
Voorbeeld
Plantaardige implementatie van Servlet-filters
@Component ("myTestFilter")MyFilter-populatiecursus implementeert filters @Autowired MijnService mijnService privé; @ Verbrijzeling Officiële rollback-initialisatie (FilterConfig filterConfig) resultaten bij ServletException bij Crush openbare nutteloze doFilter (ServletRequest, ServletResponse, filterketen) gooit IOException, ServletException System.out.println ("- In MijnFilter -"); HttpServletRequest komt overeen met req call (HttpServletRequest); mijnService.doSomething (req); .DoFilter-tekenreeks (verzoek, antwoord); @ Verbrijzeling onnodig publiekelijk vernietigen ()
Java-configuratieklasse
@EnableWebMvc@Bouw@ComponentScanopenbare training MyWebConfig
DelegatingFilterProxy opslaan
Aanbevolen: Fortect
Bent u het beu dat uw computer traag werkt? Zit het vol met virussen en malware? Vrees niet, mijn vriend, want Fortect is hier om de dag te redden! Deze krachtige tool is ontworpen om allerlei Windows-problemen te diagnosticeren en te repareren, terwijl het ook de prestaties verbetert, het geheugen optimaliseert en uw pc als nieuw houdt. Wacht dus niet langer - download Fortect vandaag nog!
uitgebreide openbare school AppInitializer AbstractAnnotationConfigDispatcherServletInitializer ............. @ Verbrijzeling gedekte filter [] getServletFilters () DelegatingFilterProxy filterProxy betekent nieuw DelegatingFilterProxy (); filterProxy.setTargetBeanName ("mijnTestFilter"); nieuw poolfilter [] herhaal proxyfilter; .............
Controller
Afsluiten
V
- MijnFilter--In MijnService: / app- Verwerking van het verzoek via de controller -
Voorbeeldproject
- spring-webmvc 4.3.9.RELEASE: Spring Web MVC.
- Spring-Test 4.3.9.RELEASE: Spring TestContext Framework.
- javax.servlet- api 3.1.0 Java Servlet API.
- junit 4.12: JUnit is een nieuw Java-testraamwerk gemaakt door Erich Gamma en Kent Beck.
- JDK 1.8
- Maven 3.3.9
Spring Inject Bean Into Servlet Filter
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
La Molla Inietta Il Fagiolo Nel Filtro Servlet