Spring 拦截器HandlerInterceptor实现对用户操作信息的记录

public class UserOperateLogInterceptor implements HandlerInterceptor {
	private final Logger userLogger = LoggerFactory.getLogger("user");

	private List<String> list = new ArrayList<String>();

	{
		list.add("/appsbackend/static/");
		list.add("/appsbackend/virtualbrand/indexImage");
	}

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {

		String requestUrl = request.getRequestURI();
		
		if (!list.contains(requestUrl)) {
			StringBuilder requestParams = new StringBuilder();
			String userName = StringUtils.split((String) SecurityUtils
					.getSubject().getPrincipal(), "\\|")[0];

			String queryString = getQueryString(request);
			requestParams.append("  ");
			requestParams.append(queryString);
			requestParams.append("  ");
			if (request instanceof AbstractMultipartHttpServletRequest) {

				AbstractMultipartHttpServletRequest multipartRequest = (AbstractMultipartHttpServletRequest) request;
				MultiValueMap<String, MultipartFile> multiValueMap = multipartRequest
						.getMultiFileMap();
				if (multiValueMap != null) {
					requestParams.append("file=");
					for (Entry<String, List<MultipartFile>> entry : multiValueMap
							.entrySet()) {
						for (MultipartFile file : entry.getValue()) {
							requestParams.append(file.getOriginalFilename());
						}
					}
				}
			}
			userLogger.info("username:{},request url:{},request parameter:{}",
					userName, requestUrl, requestParams.toString());
		}
		return true;
	}

	@SuppressWarnings("unchecked")
	public String getQueryString(HttpServletRequest request) {
		boolean first = true;
		StringBuffer strbuf = new StringBuffer("");

		Enumeration<String> emParams = request.getParameterNames();
		// do-while
		do {
			if (!emParams.hasMoreElements()) {
				break;
			}
			String sParam = (String) emParams.nextElement();
			String[] sValues = request.getParameterValues(sParam);

			String sValue = "";
			for (int i = 0; i < sValues.length; i++) {
				sValue = sValues[i];
				if (sValue != null && sValue.trim().length() != 0
						&& first == true) {
					first = false;
					strbuf.append(sParam).append("=").append(sValue);
				} else if (sValue != null && sValue.trim().length() != 0
						&& first == false) {
					strbuf.append("&").append(sParam).append("=")
							.append(sValue);
				}
			}
		} while (true);

		return strbuf.toString();
	}

	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {

	}

	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {

	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值