|
@ -4,16 +4,25 @@ package com.yihu.wlyy.interceptors;
|
|
|
* Created by chenweida on 2017/8/17.
|
|
|
*/
|
|
|
|
|
|
import com.yihu.wlyy.entity.gateway.GcHttpLog;
|
|
|
import com.yihu.wlyy.entity.gateway.GcToken;
|
|
|
import com.yihu.wlyy.repository.gateway.GcHttpLogDao;
|
|
|
import com.yihu.wlyy.repository.gateway.GcTokenDao;
|
|
|
import com.yihu.wlyy.util.NetworkUtil;
|
|
|
import com.yihu.wlyy.web.gateway.vo.base.BaseResultModel;
|
|
|
import net.sf.json.JSONObject;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
import org.springframework.web.method.HandlerMethod;
|
|
|
import org.springframework.web.servlet.ModelAndView;
|
|
|
import org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
import java.util.Date;
|
|
|
|
|
|
/**
|
|
|
* 对外的请求拦截
|
|
@ -24,20 +33,96 @@ public class GateWayInterceptor extends BaseInterceptor {
|
|
|
private Logger logger = LoggerFactory.getLogger(GateWayInterceptor.class);
|
|
|
@Autowired
|
|
|
private GcHttpLogDao httpLogDao;
|
|
|
@Autowired
|
|
|
private GcTokenDao tokenDao;
|
|
|
|
|
|
/**
|
|
|
* preHandle:预处理回调方法
|
|
|
*
|
|
|
* @param request
|
|
|
* @param response
|
|
|
* @param handler
|
|
|
* @return
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@Override
|
|
|
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
|
|
return false;
|
|
|
String token = request.getParameter("token");
|
|
|
String ip = NetworkUtil.getIpAddress(request);
|
|
|
try {
|
|
|
GcToken gcToken = tokenDao.findByToken(token);
|
|
|
if (gcToken == null) {
|
|
|
saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, token, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.codeEm.token_no_power.getMessage());
|
|
|
//没权限
|
|
|
BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.codeEm.token_no_power.getCode(), BaseResultModel.codeEm.token_no_power.getMessage());
|
|
|
response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
|
|
|
}
|
|
|
if (gcToken.getDel() == null || gcToken.getDel() == 0) {
|
|
|
saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, token, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.codeEm.token_out_effect.getMessage());
|
|
|
//token无效
|
|
|
BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.codeEm.token_out_effect.getCode(), BaseResultModel.codeEm.token_out_effect.getMessage());
|
|
|
response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
|
|
|
}
|
|
|
if (System.currentTimeMillis() > gcToken.getOutTime().getTime()) {
|
|
|
saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, token, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.codeEm.token_out_time.getMessage());
|
|
|
//token过期
|
|
|
BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.codeEm.token_out_time.getCode(), BaseResultModel.codeEm.token_out_time.getMessage());
|
|
|
response.getOutputStream().write(JSONObject.fromObject(baseResultModel).toString().getBytes());
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
saveHttpLog(ip, JSONObject.fromObject(request.getParameterMap()).toString(), null, token, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), e.getMessage());
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 后处理回调方法
|
|
|
*
|
|
|
* @param request
|
|
|
* @param response
|
|
|
* @param handler
|
|
|
* @param modelAndView
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@Override
|
|
|
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
|
|
|
HandlerMethod handlerMethod = (HandlerMethod) handler;
|
|
|
|
|
|
//保存成功之后的日志
|
|
|
String token = request.getParameter("token");
|
|
|
String ip = NetworkUtil.getIpAddress(request);
|
|
|
saveHttpLog(ip,
|
|
|
JSONObject.fromObject(request.getParameterMap()).toString(),
|
|
|
JSONObject.fromObject(modelAndView.getModelMap()).toString(),
|
|
|
token,
|
|
|
request.getRequestURI(),
|
|
|
GcHttpLog.flagEm.success.getCode(),
|
|
|
null);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 整个请求处理完毕回调方法
|
|
|
*
|
|
|
* @param request
|
|
|
* @param response
|
|
|
* @param handler
|
|
|
* @param ex
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@Override
|
|
|
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
|
|
|
|
|
}
|
|
|
|
|
|
@Transactional
|
|
|
public void saveHttpLog(String ip, String input, String output, String token, String method, Integer flag, String message) {
|
|
|
GcHttpLog gcHttpLog = new GcHttpLog();
|
|
|
gcHttpLog.setCreateTime(new Date());
|
|
|
gcHttpLog.setIp(ip);
|
|
|
gcHttpLog.setInput(input);
|
|
|
gcHttpLog.setOutput(output);
|
|
|
gcHttpLog.setToken(token);
|
|
|
gcHttpLog.setMethod(method);
|
|
|
gcHttpLog.setFlag(flag);
|
|
|
httpLogDao.save(gcHttpLog);
|
|
|
}
|
|
|
}
|