小记这个简单的方法。 /** * 获取客户端IP * * @param request * @return */ private String getIpAddr(HttpServletRequest request) { String remoteAddr = request.getHeader("X-Forwarded-For"); if (StringUtil.isBlank(remoteAddr)) { remoteAddr = request.getHeader("Proxy-Client-IP"); } if (StringUtil.isBlank(remoteAddr)) { remoteAddr = request.getHeader("WL-Proxy-Client-IP"); } return remoteAddr != null ? remoteAddr : request.getRemoteAddr(); }
这里面我是用在项目里面需要记录日志的地方。记录日志通过拦截器实现,继承org.springframework.web.servlet.handler.HandlerInterceptorAdapter这个类。在重写的方法中
@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { if (handler instanceof HandlerMethod) { //这里是权限判断的部分 PermissionRequester accessPermissions = ((HandlerMethod) handler).getMethodAnnotation(PermissionRequester.class); String[] perms = getAnnotationValue(accessPermissions); if (ArrayUtil.isEmptyArray(perms)) { return; } try { //日志记录 LogThread logThread = new LogThread(getIpAddr(request), userHandler.getCurrentUserId(), request.getRequestURL().toString(), perms, new Date()); Thread thread = new Thread(logThread); thread.start(); } catch (Exception e) { LOGGER.errorMessage("创建系统日志出现异常", e); } } }