SpringMVC 使用拦截器实现日志记录
java web日志实现方式有很多种,这次在这里介绍使用拦截器记录日志
- 拦截器代码
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); } }
讯享网
- 配置文件中加入连接器配置
讯享网<mvc:interceptor> <mvc:mapping path="/service/" /> <bean id="logInterceptor" class="com.my.interceptor.LogInterceptor" /> </mvc:interceptor>
- 获取远程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; }

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