Un Moyen Facile De Sécuriser Un Ressort Chargé De Grain D’injecteur Dans Un Filtre De Servlet
November 30, 2021Il vaut la peine de lire ces méthodes de solution si vous obtenez le code d’erreur Spring Inject Bean dans les filtres de servlet sur votre machine.
Recommandé : Fortect
Pour donner une idée claire de la façon dont les piments peuvent être visualisés dans différents contextes
Au printemps, il n’y a que deux types de contextes
1. Racine (contexte du contexte chargé sur ContextLoaderListener)
2. Servlet (contexte chargé incluant DispatcherServlet)
Beans définis dans RootContext visibles dans ServletContext ? – OUI
Les composants définis dans le contexte racine global sont toujours visibles par défaut en utilisant tous les contextes de servlet. La capacité du bean dataSource décrite dans le contexte Cheer est un peu plus accessible ici dans la situation de servlet comme indiqué ci-dessous.
@configurationpublic .class .RootConfiguration ... ... ... ... - Haricot :. ... .public .DataSource .dataSource () :. ... ... ... ... -. ... ... .... @Construction@ActiverWebMvc@ComponentScan (basePackages = "com.pvn.mvctiles")Outils de configuration de servlet de classe criminelle WebMvcConfigurer @Autowired source de données unique DataSource ; ...
Les haricots définis en termes de ServletContext sont visibles dans RootContext, par exemple Oui 4 .
applicationContext.getBeanDefinitionNames ();
2.Si vous souhaitez accéder aux haricots secs en raison du contexte du servlet, une collation ou une autre étiquette d’enregistrement de servlet, ajoutez le package de base "org.springframework.web.servlet"
au fichier principal classer. Configuration/xml
@configuration@ComponentScan (basePackages implique "org.springframework.web.servlet")Classes publiques RootConfiguration
Une fois ajoutés, vous trouverez tous les composants spécifiques listés ci-dessous à partir du contexte du terrain
springSecurityConfig
, tileConfigurer
, themeSource
, themeResolver
, messageSource
, localeResolver
, requestMappingHandlerMapping
, mvcPathMatcher
, mvcUrlPathHelper
, mvcContentNegotiationManager
, viewControllerHandlerMapping
, beanNameHandlerMapping
, resourceHandlerMapping
, mvcResourceUrlProvider
, defaultServletHandlerMapping
, requestMappingHandlerAdapter
, mvcConversionService
, mvcValidator
, mvcUriComponentsContributor
, httpRequestHandlerAdapter
, simpleControllerHandlerAdapter
, handlerExceptionResolver
, mvcViewResolver
, mvcHandlerMappingIntrospector
Si vous souhaitez mettre la main sur vos propres fèves de cacao dans n’importe quel rootContext, ajoutez un package de base qui vaut vraiment la peine d’analyser les composants RootContext comme mentionné ci-dessous.
@configuration@ComponentScan (basePackages implique "com.your.configuration.package", "org.springframework.web.servlet")Classe de collège public RootConfiguration
La configuration ci-dessus est utile si vous trouvez que vous voulez que la préoccupation embarquée soit disponible dans votre RootContext et en plus également disponible dans votre filtre de servlet le plus récent. Par exemple, si vous croyez à une exception dans un filtre et que vous souhaitez ensuite envoyer la même réponse d’erreur précise même si la réponse a été envoyée à partir de HttpMessageConverter
sauf configuré de cette façon dans servletContext, les clients potentiels pourraient vouloir d’utiliser ce convertisseur de résine composite pour envoyer un retour partagé …
@Autowiredprivate ApplicationContext appContext;
ApplicationContext Autowiring ne fait pas son travail dans le filtre Servlet et les filtres semblent avoir été initialisés avant que le conteneur Spring n’ait été initialisé. (Selon la commande connectée à votre filtre, également DelegatingProxyFilter)
classe criminelle YourFilter implémente des filtres private ApplicationContext appContext; @ Écraser manifest void init (FilterConfig filterConfig) couvre ServletException Filter.super.init (filterConfig); appContext équivaut à WebApplicationContextUtils.getRequiredWebApplicationContext (filterConfig.getServletContext ());
J’espère qu’il y aura probablement une technique claire pour rendre les grains de café disponibles entre les contextes.
(Pourquoi dans * Oui)
1. Initialisation de l’ordre des facteurs – rootCo firstntext et après quoi servletContext.Lors de l’initialisation de rootContext i. H. autour de la façon dont la configuration du contexte root / xml se fait, si jamais vous essayez de délimiter veg dans votre servletContext, il recherche généralement NULL. (puisque certains servletContext ne sont pas encore initialisés, je peux donc simplement dire que les constituants de l’espresso ne sont pas visibles / enregistrés lorsque le rootContext lors de l’initialisation)
Mais une personne peut définir des beans ici à propos de servletContext après l’initialisation de servletContext (vous pouvez mettre des beans dans le contexte de l’application)
Utilisez
WebApplicationContextUtils
:évite l'initialisation publique (FilterConfig cfg) ApplicationContext ctx = WebApplicationContextUtils .getRequiredWebApplicationContext (cfg.getServletContext ()); this.bean apparaît pour ctx.getBean (YourBeanType.class);
Avec
DelegatingFilterProxy
, votre organisation mappe qui peut filtrer sa propre déclaration de filtre pendant le bean. Le proxy d’attribution appelle alors simplement tous les grains de café qui exécutent l’interfaceFilter
.Utilisez
@Configurable
pour votre bloc. Cependant, je préférerais l’une ou l’autre de ces deux autres options. (Ce choix inclut le tissage Aspect J)
Bean
UsersConnectionRepository signifie (UsersConnectionRepository) WebApplicationContextUtils. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean ("usersConnectionRepository");
Où usersConnectionRepository
est probablement leur nom/ID de vos beans pour le contexte de l’application. Ou supérieur :
UsersConnectionRepository-Bean WebApplicationContextUtils =. getRequiredWebApplicationContext (filterConfig.getServletContext ()). getBean (UsersConnectionRepository.class);
public void init (FilterConfig cfg) super.init (cfg); SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext (ceci);
Ensuite, @injectez uniquement votre piment de base dans ce filtre, la même chance que pour tout autre haricot que vous pourriez probablement injecter.
@InjectBase de données privée UsersConnectionRepository ;
DelegatingFilterProxy peut souvent être utilisé comme proxy pour un filtre Servlet générique.
Le DelegatingFilterProxy lui-même est également le véritable filtre de servlet qui délègue à un bean géré Spring spécifique qui implémente quelques types d’interface de filtre.
Nous avons besoin d’un emplacement pour que la propriété targetBeanName DelegatingFilterProxy soit généralement le nom des beans cibles (le bean qui implémente l’interface de filtrage).
Exemple
Filtres de servlet d’implémentation de légumes
@Component ("myTestFilter")Le cours de troupeau MyFilter implémente des filtres @Autowired MyService myService privé ; @ Écraser Résultats officiels de l'initialisation de la restauration (FilterConfig filterConfig) près de ServletException à l'écrasement doFilter public vide (ServletRequest, ServletResponse, chaîne de filtre) lève IOException, ServletException System.out.println ("- Dans MyFilter -"); HttpServletRequest correspond à req ask (HttpServletRequest); myService.doSomething (req); Chaîne .DoFilter (demande, réponse); @ Écraser détruire publiquement inutilement ()
Classe de configuration Java
Enregistrer DelegatingFilterProxy
Recommandé : Fortect
Vous en avez assez que votre ordinateur fonctionne lentement ? Est-il truffé de virus et de logiciels malveillants ? N'ayez crainte, mon ami, car Fortect est là pour sauver la mise ! Cet outil puissant est conçu pour diagnostiquer et réparer toutes sortes de problèmes Windows, tout en améliorant les performances, en optimisant la mémoire et en maintenant votre PC comme neuf. Alors n'attendez plus - téléchargez Fortect dès aujourd'hui !
variété publique étendue AppInitializer AbstractAnnotationConfigDispatcherServletInitializer ............. @ Écraser filtre sans risque [] getServletFilters () DelegatingFilterProxy filterProxy implique un nouveau DelegatingFilterProxy (); filterProxy.setTargetBeanName ("myTestFilter"); nouveau purificateur [] répéter le filtre proxy ; .............
Contrôleur
Quitter
V
- MonFiltre--Dans MyService : /app- Traitement de la demande concernant le contrôleur -
Exemple de projet
- 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 est un framework de test Java complet créé par Erich Gamma et 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
La Molla Inietta Il Fagiolo Nel Filtro Servlet