1. Filtre
Regardez d'abord l'emplacement du filtre du serveur web. Le filtre est une chaîne connectée avant et après. Une fois le traitement précédent terminé, il est transmis au filtre suivant pour traitement.

1.1 Définition de l'interface du filtre
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public interface Filter {
public void init(FilterConfig filterConfig) throws ServletException;
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
public void destroy();
}
|
Copier après la connexion
Les paramètres d'entrée du filtre sont la demande et la réponse. Le filtre est généralement utilisé pour effectuer certains travaux de prétraitement, comme effectuer des inspections, des vérifications, etc. F1.2 Filtre personnalisé
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | public class LoginFilter implements Filter {
@Override
public void destroy() {
System.out.println( "filter destroy method" );
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain filterChain)
throws IOException, ServletException {
System.out.println( "filter doFilter method " );
filterChain.doFilter(arg0,arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println( "filter init method" );
}
}
|
Copier après la connexion
2, enregistrement du filtre SpringBoot de plusieurs manières
2.1 Enregistrement manuel
1 2 3 4 5 6 7 8 9 | @Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean indexFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean( new LoginFilter());
registration.addUrlPatterns( "/" );
return registration;
}
}
|
Copier après la connexion
E
2.2 Révision
2.2.1 Ajouter une note sur Filter@Webfilterrrrrrrrrrrr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | @WebFilter(urlPatterns = "/" ,filterName = "filter1" )
@Order(1)
public class LoginFilter implements Filter {
@Override
public void destroy() {
System.out.println( "filter destroy method" );
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain filterChain)
throws IOException, ServletException {
System.out.println( "filter doFilter method 1 " );
filterChain.doFilter(arg0,arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println( "filter init method" );
}
}
|
Copier après la connexion
2. 2.2.2 Ajouter l'annotation @ ServletComponentScan à la classe de démarrage
1 2 3 4 5 6 7 | @SpringBootApplication
@ServletComponentScan
public class FilterTestApplication {
public static void main(String[] args) {
SpringApplication.run(FilterTestApplication. class , args);
}
}
|
Copier après la connexion
Remarque :
@ServletComponentScan analysera toutes les classes avec @WebFilter et les enregistrera en tant que servlets.
Si la classe de démarrage n'ajoute pas cette annotation, l'ajout de l'annotation Component sur le filtre peut également être enregistrée en tant que filtre
l'annotation d'ordre peut ajuster l'ordre des filtres
2.3 S'inscrire via servletContext
1 | @Autowired ServletContext servletContext; servletContext.addFilter()
|
Copier après la connexion
3 Principe
. 3.1 ServletContext
Conteneur Web Un objet ServletContext est créé pour chaque application Web au démarrage, et cet objet ServletContext représente l'application Web actuelle.
Un objet ServletContext représente une application Web. Tous les servlets et autres ressources de l'application Web partagent un objet ServletContext.
Si nécessaire, nous pouvons communiquer entre les servlets via l'objet ServletContext.
ServletContext est un espace de stockage global d'informations. Il existe au démarrage du serveur et n'est libéré que lorsque le serveur est arrêté. Un utilisateur peut avoir plusieurs requêtes : une session, une pour chaque utilisateur ; et un servletContext, tous les utilisateurs en partagent une.

ApplicationContext est la classe d'implémentation de ServletContext Vous pouvez voir qu'il contient des méthodes d'enregistrement correspondantes
Obtenez ServletContext dans le programme
3.1.1 Utiliser l'injection automatique
1 | @Autowired private ServletContext servletContext;
|
Copier après la connexion
3.1.2 requête pour. get servletContext
1 | ServletContext servletContext = request.getServletContext();
|
Copier après la connexion
3.1.3 Implémenter ServletContextListener
1 2 3 4 5 6 7 | @Component
public class TestListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println(sce);
}
}
|
Copier après la connexion
3.2 ServletRegistrationBean
Regardez la définition de Filter, vous pouvez voir que c'est la même chose que le contenu de l'annotation du filtre Web
1 2 3 4 5 6 7 8 9 | public class ServletRegistrationBean<T extends Servlet> extends DynamicRegistrationBean<ServletRegistration.Dynamic> {
private static final String[] DEFAULT_MAPPINGS = new String[]{ "/*" };
private T servlet;
private Set<String> urlMappings;
private boolean alwaysMapUrl;
private int loadOnStartup;
private MultipartConfigElement multipartConfig;
......
}
|
Copier après la connexion
Utilisez généralement sa sous-classe FilterRegistrationBean en développement , et utilisez 2.1 ci-dessus pour vous inscrire manuellement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!