Maison >Java >javaDidacticiel >Analyse comparative d'exemples chronophages d'implémentation SpringBoot d'intercepteurs de filtres
Cette méthode est plus simple mais pas très configurable
Remarque : Doit être numérisée dans le conteneur Spring
Créez une classe pour implémenter l'interface de filtre
init : Cette méthode est destinée au filtre L'initialisation de l'objet La méthode n'est appelée qu'une seule fois après que le conteneur a initialisé l'objet filtre.Le paramètre FilterConfig peut obtenir les paramètres d'initialisation du filtre
doFilter : peut effectuer une requête et une réponse <u>预处理</u>
。其中FilterChain可以将处理后的
Les objets de requête et de réponse sont transmis à la chaîne de filtrage ; ressource.
destroy() : Cette méthode est appelée avant que le conteneur ne détruise l'objet.
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @Component public class LogFilter implements Filter { private static final Logger LOG = LoggerFactory.getLogger(LogFilter.class); @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 打印请求信息 HttpServletRequest request = (HttpServletRequest) servletRequest; LOG.info("------------- LogFilter 开始 -------------"); LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod()); LOG.info("远程地址: {}", request.getRemoteAddr()); long startTime = System.currentTimeMillis(); filterChain.doFilter(servletRequest, servletResponse); LOG.info("------------- LogFilter 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime); } }
Résultats
Résumé
1. Les filtres sont utilisés pour implémenter des fonctions communes, réduire la redondance du code et améliorer la maintenabilité
2.
3. Une ressource peut également être configurée avec plusieurs filtres, qui sont appelés dans l'ordre de configuration.
Si vous ne comprenez pas, veuillez d'abord lire l'introduction puis revenir
Introduction à l'intercepteur
Plus de mots, allez simplement au code
Créer un intercepteur
/** * 拦截器:Spring框架特有的,常用于登录校验,权限校验,请求日志打印 /login * @author : look-word * 2022-06-26 13:55 **/ @Component public class LogInterceptor implements HandlerInterceptor { private static final Logger LOG = LoggerFactory.getLogger(LogInterceptor.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 打印请求信息 LOG.info("------------- LogInterceptor 开始 -------------"); LOG.info("请求地址: {} {}", request.getRequestURL().toString(), request.getMethod()); LOG.info("远程地址: {}", request.getRemoteAddr()); long startTime = System.currentTimeMillis(); request.setAttribute("requestStartTime", startTime); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { long startTime = (Long) request.getAttribute("requestStartTime"); LOG.info("------------- LogInterceptor 结束 耗时:{} ms -------------", System.currentTimeMillis() - startTime); } }
Enregistrez un intercepteur
Notre intercepteur est enregistré dans la chaîne des intercepteurs
/** * @author : look-word * 2022-06-26 14:03 **/ @Configuration public class SpringMvcConfig implements WebMvcConfigurer { @Resource private LogInterceptor logInterceptor; /** * 注册拦截器 * @param registry */ @Override public void addInterceptors(InterceptorRegistry registry) { registry .addInterceptor(logInterceptor) .addPathPatterns("/**")// 对那些接口拦截 .excludePathPatterns("/login");// 对哪些接机口放行 WebMvcConfigurer.super.addInterceptors(registry); } }
Résultats des tests
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!