Ett Enkelt Sätt Att Säkra En Fjäderbelastad Injektorkorn Med Hjälp Av Ett Servletfilter
November 29, 2021Det är värt att läsa dessa korrigeringsmetoder om kunden får Spring Inject Bean-felkod i servletfilter på en individs maskin.
Rekommenderas: Fortect
För att ge en tydlig uppfattning om hur chilipeppar kan ses i olika sammanhang
I språnget finns det bara två typer med sammanhang
1. Root (kontext av en ny kontext laddad av ContextLoaderListener)
2. Servlet (kontext laddad från DispatcherServlet)
Bönor definierade i RootContext Synliga i ServletContext? – JA
Komponenter som är specifika i hela rotkontexten är i allmänhet alltid synliga som standard med vissa servletkontexter. Möjligheten för en del av dataSource-bönan som definieras i Cheer-kontexten kan nås här hela vägen genom servlet-kontexten som noterats med.
@konfigurationpublic .class .RootConfiguration ... ... ... ... @ Bean :. ... .public .DataSource .dataSource () :. ... ... ... ... -. ... ... .... @Konstruktion@ActiverWebMvc@ComponentScan (basePackages motsvarar "com.pvn.mvctiles")WebMvcConfigurer public class servlet arrangemang verktyg @Autowired privat datakälla DataSource; ...
Bönor definierade i termer av ServletContext är synliga i RootContext, till exempel Ja *
applicationContext.getBeanDefinitionNames ();
2. Om du vill se torra bönor från sammanhanget utanför servleten i en kollation eller bara annan servletetikett, lägg till ett baspaket "org.springframework.web.servlet"
till huvudklassen för närvarande. Konfiguration / xml
@konfiguration@ComponentScan (basePackages = "org.springframework.web.servlet")Offentliga klasser rotkonfiguration
När du har lagt till kommer du att hitta alla komponenter som listas i paketkontexten
springSecurityConfig
, tileConfigurer
, themeSource
, themeResolver
, messageSource
, > localeResolver
, requestMappingHandlerMapping
, mvcPathMatcher
, mvcUrlPathHelper
, mvcContentNegotiationManager
, viewControllerHandlerMapping
>, beanNameHandlerMapping
, resourceHandlerMapping
, mvcResourceUrlProvider
, defaultServletHandlerMapping
, requestMappingHandlerAdapter
, mvcConversionService
, mvcValidator
, mvcUriComponentsContributor
, httpRequestHandlerAdapter
, simpleControllerHandlerAdapter
, handlerExceptionResolver
, mvcViewResolver
, mvcHandlerMappingIntrospector
Om någon vill skaffa dina egna chokladbönor i rootContext, lägg till ett stort baspaket värt att analysera RootContext-komponenterna enligt beskrivningen nedan.
@konfiguration@ComponentScan (basePackages = "com.your.configuration.package", "org.springframework.web.servlet")RootConfiguration Public College Class
Överkonfigurationen är användbar om du vill så att den inbäddade besattheten finns tillgänglig i din RootContext och även tillgänglig på insidan av ditt nya servletfilter. Till exempel, om du hittar ett undantag för ett filter och vill erbjuda samma felsvar även svaret skickades direkt från HttpMessageConverter
men konfigurerat detta betyder i servletContext, kanske klienter vill använda denna sammansatta omvandlare för att cirkulera ett delat svar …
@Autowiredprivat ApplicationContext appContext;
ApplicationContext Autowiring gör inte jobbet i vart och ett av våra Servlet-filter eftersom filtren är bra att ha initierats innan min Spring-behållare initierades. (Beroende helt på ordningen på ditt filter, likaså DelegatingProxyFilter)
public class YourFilter implementerar filter känslig ApplicationContext appContext; på Crush manifest empty init (FilterConfig filterConfig) kastar ServletException Filter.super.init (filterConfig); appContext = WebApplicationContextUtils.getRequiredWebApplicationContext (filterConfig.getServletContext ());
Jag hoppas att det finns en tydlig procedur för att göra bönor tillgängliga om sammanhang.
(Varför fungerar i * Ja)
1. Initiera någon ordning av omständigheter – rootCo firstntext men även sedan servletContext.När du initialiserar rootContext me. H. runt root- och xml-kontextkonfigurationsklassen, om du ännu försöker definiera veg i servletContext kommer den att leta efter NULL. (eftersom servletContext inte bör initieras ännu, så vi kan säga vilka experter som hävdar att espressokomponenterna inte är grafiska/sparade i rootContext medan du är på initialisering)
Men du kan definiera baljväxter här i servletContext efter servletContext-initiering (du kan få bönor genom formsammanhang)
Använd
WebApplicationContextUtils
:undvik öppen för offentlig initiering (FilterConfig cfg) ApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext (cfg.getServletContext ()); this.bean står för ctx.getBean (YourBeanType.class);
Med
DelegatingFilterProxy
mappar du vem som kan filtrera till din filterdeklaration medan bean. Den delegerande proxyn anropar sedan rent alla bönor som utan tvekan kör gränssnittetFilter
.Använd
@Configurable
med ditt block. Men jag skulle önska något av de två andra programmen. (Detta val använder Aspect J-väv)
Bean
UsersConnectionRepository står (UsersConnectionRepository) WebApplicationContextUtils. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean ("usersConnectionRepository");
Där usersConnectionRepository
verkligen troligen namnet / ID:t på din böna för iphone-appens sammanhang. Eller bättre:
UsersConnectionRepository-Bean WebApplicationContextUtils =. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean (UsersConnectionRepository.class);
allmän publik void init (FilterConfig cfg) super.init (cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (detta);
Sedan @injicera enbart dina kärnbönor i den reningen, samma möjlighet som för en ny annan böna du förmodligen skulle göra när det är lämpligt.
@InjiceraPrivat arkiv UsersConnectionRepository;
DelegatingFilterProxy kan användas som en lämplig proxy för en generisk Servlet-borttagning.
Själva DelegatingFilterProxy är i hög grad också ett servletfilter som internationellt delegerar till en specificerad Spring managed beans som implementerar något slags smalt gränssnitt.
Vi behöver vilken typ av plats som helst där targetBeanName DelegatingFilterProxy-hemmet och -egendomen ska vara namnet på just denna målböna (bönan som tillbehör filtreringsgränssnittet).
Exempel
Servletfilter för grönsaksimplementering
@Component ("myTestFilter")MyFilter filter för offentlig kursutrustning @Autowired MyService myService privat; - Krossa Officiell återställningsinitiering (FilterConfig filterConfig) resulterar i ServletException @ Krossa public void doFilter (ServletRequest, ServletResponse, Filterkedja) organiserar IOException, ServletException System.out.println ("- I MyFilter -"); HttpServletRequest matchar begäran (HttpServletRequest); myService.doSomething (req); .DoFilter (begäran, svar); - Krossa förstöra offentligt utan vederbörlig orsak ()
Java Config Class
@EnableWebMvc@Konstruktion@ComponentScanpublic class MyWebConfig
Spara DelegatingFilterProxy
Rekommenderas: Fortect
Är du trött på att din dator går långsamt? Är det full av virus och skadlig kod? Var inte rädd, min vän, för Fortect är här för att rädda dagen! Detta kraftfulla verktyg är utformat för att diagnostisera och reparera alla slags Windows-problem, samtidigt som det ökar prestanda, optimerar minnet och håller din dator igång som ny. Så vänta inte längre - ladda ner Fortect idag!
utökad offentlig klass AppInitializer AbstractAnnotationConfigDispatcherServletInitializer ............ på Crush skyddat filter [] getServletFilters () DelegatingFilterProxy filterProxy = ny DelegatingFilterProxy (); filterProxy.setTargetBeanName ("myTestFilter"); nyare filter [] upprepa proxyfilter; ............
Styrenhet
Avsluta
V
- MyFilter--I MyService: / app- Hantera begäran i regulatorn -
Exempelprojekt
- 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 är en Java-testplan skapad av Erich Gamma och 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
Le Ressort Injecte Le Haricot Dans Le Filtre De Servlet
La Molla Inietta Il Fagiolo Nel Filtro Servlet