2025年SpringMVC 使用拦截器实现日志记录

SpringMVC 使用拦截器实现日志记录SpringMVC 使用拦截器实现日志记录 java web 日志实现方式有很多种 这次在这里介绍使用拦截器记录日志 拦截器代码 package com my interceptor import java util List import java util Map import java util Map

大家好,我是讯享网,很高兴认识大家。

SpringMVC 使用拦截器实现日志记录

java web日志实现方式有很多种,这次在这里介绍使用拦截器记录日志


讯享网

  1. 拦截器代码
 package com.my.interceptor; import java.util.List; import java.util.Map; import java.util.Map.Entry; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.util.AntPathMatcher; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import com.my.service.AdminService; import com.my.service.LogService; import com.my.utils.WebUtils; / * Interceptor - 日志 */ public class LogInterceptor extends HandlerInterceptorAdapter { 
    / 默认忽略参数 */ private static final String[] DEFAULT_IGNORE_PARAMETERS = new String[] { 
    "password", "rePassword", "currentPassword" }; / antPathMatcher */ private static AntPathMatcher antPathMatcher = new AntPathMatcher(); / 忽略参数 */ private String[] ignoreParameters = DEFAULT_IGNORE_PARAMETERS; @Autowired private LogService logService; @Autowired private AdminService adminService; / * 该方法将在请求处理之前进行调用 * @param request 请求 * @param response 响应 * @param handler 操作 * @return true继续进入下一个拦截器的preHandle方法或者进入对应的Controller方法,false终止请求 * @throws Exception */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { 
    return super.preHandle(request, response, handler); } / * 在调用Controller方法后,在DispatcherServlet 进行视图返回渲染视图前进行调用 * @param request 请求 * @param response 响应 * @param handler 操作 * @param modelAndView 视图 * @throws Exception */ @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { 
    String path = request.getServletPath(); //当前登录用户名 String operator = adminService.getLoginedName(); //获取用户IP String ip = WebUtils.getRemoteIp(request); StringBuffer parameter = new StringBuffer(); Map<String, String[]> parameterMap = request.getParameterMap(); if (parameterMap != null) { 
    for (Entry<String, String[]> entry : parameterMap.entrySet()) { 
    String parameterName = entry.getKey(); if (!ArrayUtils.contains(ignoreParameters, parameterName)) { 
    String[] parameterValues = entry.getValue(); if (parameterValues != null) { 
    for (String parameterValue : parameterValues) { 
    parameter.append(parameterName + " = " + parameterValue + "\n"); } } } } } Log log = new Log(); log.setParameter(parameter.toString()); log.setOperator(operator); log.setIp(ip); logService.save(log); } / * 在视图渲染后调用 * @param request 请求 * @param response 响应 * @param handler 操作 * @param ex * @throws Exception */ @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { 
    super.afterCompletion(request, response, handler, ex); } } 

讯享网
  1. 配置文件中加入连接器配置
讯享网<mvc:interceptor> <mvc:mapping path="/service/" /> <bean id="logInterceptor" class="com.my.interceptor.LogInterceptor" /> </mvc:interceptor> 
  1. 获取远程IP地址
 / * 获取远程网协地址 * * @param request HttpServletRequest * @return 远程网协地址 */ public static String getRemoteIp(HttpServletRequest request) { 
    if (request == null) { 
    return null; } String remoteIp = request.getHeader("x-forwarded-for"); if (StringUtils.isBlank(remoteIp) || StringUtils.equalsIgnoreCase(remoteIp, "unknown")) { 
    remoteIp = request.getHeader("Proxy-Client-IP"); } if (StringUtils.isBlank(remoteIp) || StringUtils.equalsIgnoreCase(remoteIp, "unknown")) { 
    remoteIp = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.isBlank(remoteIp) || StringUtils.equalsIgnoreCase(remoteIp, "unknown")) { 
    remoteIp = request.getHeader("HTTP_CLIENT_IP"); } if (StringUtils.isBlank(remoteIp) || StringUtils.equalsIgnoreCase(remoteIp, "unknown")) { 
    remoteIp = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (StringUtils.isBlank(remoteIp) || StringUtils.equalsIgnoreCase(remoteIp, "unknown")) { 
    remoteIp = request.getRemoteAddr(); } return remoteIp; } 
小讯
上一篇 2025-04-08 17:17
下一篇 2025-04-05 07:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/13150.html