J'utilise Spring MVC ** Je veux enregistrer l'URL de la requête et les paramètres de la requête! ** ** Cela arrivait souvent, et à chaque fois que je créais une classe de filtre dédiée,
Ne serait-il pas heureux si je le laissais dans l'article pour moi-même?
Je l'ai pensé et décrit. C'est une note tout à fait personnelle.
Java 8 (fonctionne également avec 11)
Spring Boot 2.2.1
Spring MVC (la version utilise les règles de démarrage)
Lombok (la version utilise les règles de démarrage)
Je ne l'ai pas essayé avec Spring Web Flux.
package com.example.demo.filter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.Map;
@Slf4j
@Component
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpReq = ((HttpServletRequest)request);
String uri = httpReq.getRequestURI();
long start = System.currentTimeMillis();
log.info(String.format("Commencer le traitement. URI: %s", uri));
//Traitez le paramètre de demande et sortez-le sous forme de journal sur une ligne
Map<String, String[]> params = httpReq.getParameterMap();
StringBuilder strParams = new StringBuilder("Paramètres de demande: [");
boolean isFirstParam = true;
for (Map.Entry<String, String[]> param : params.entrySet()) {
if (isFirstParam) {
isFirstParam = false;
} else {
//Ajouter une virgule comme concaténateur pour le deuxième paramètre de requête et les suivants
strParams.append(", ");
}
strParams.append(param.getKey()).append("=").append(Arrays.toString(param.getValue()));
}
strParams.append("]");
log.info(strParams.toString());
//Mise en œuvre de chaque processus
chain.doFilter(request, response);
int status = ((HttpServletResponse) response).getStatus();
log.info(String.format("Sortie de traitement.Temps requis%d millis. STATUS=%d", System.currentTimeMillis() - start, status));
}
@Override
public void destroy() {
}
}
2019-11-14 11:54:40.297 INFO 2001 --- [nio-8080-exec-1] com.example.demo.filter.LoggingFilter :Commencer le traitement. URI: /demo/hello
2019-11-14 11:54:40.298 INFO 2001 --- [nio-8080-exec-1] com.example.demo.filter.LoggingFilter :Paramètres de demande: [hoge=[1], fuga=[2]]
2019-11-14 11:54:40.327 INFO 2001 --- [nio-8080-exec-1] com.example.demo.filter.LoggingFilter :Sortie de traitement.Temps requis 30 millis. STATUS=200
Le format du journal reste la norme Spring Boot. Personnellement, la sortie du journal est écrite en japonais car elle est facile à comprendre en japonais. Parfois, je pense qu'il vaut mieux faire un peu plus, mais je l'écris souvent dans ce style. Il n'est pas surprenant que la déclaration For étendue soit un peu dégoûtante, mais elle est ennuyeuse et n'a pas été révisée.
Notez que ce filtre prend en charge les paramètres de tableau, mais ne prend pas en charge les fichiers joints.
Recommended Posts