|  | @ -0,0 +1,164 @@
 | 
												
													
														
															|  | 
 |  | package com.yihu.jw.hospital.interceptor;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | /**
 | 
												
													
														
															|  | 
 |  |  * Created by chenweida on 2017/8/17.
 | 
												
													
														
															|  | 
 |  |  */
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | import com.alibaba.fastjson.JSONObject;
 | 
												
													
														
															|  | 
 |  | import com.yihu.jw.entity.iot.gateway.GcHttpLog;
 | 
												
													
														
															|  | 
 |  | import com.yihu.jw.entity.iot.gateway.GcToken;
 | 
												
													
														
															|  | 
 |  | import com.yihu.jw.gateway.dao.GcHttpLogDao;
 | 
												
													
														
															|  | 
 |  | import com.yihu.jw.gateway.dao.GcTokenDao;
 | 
												
													
														
															|  | 
 |  | import com.yihu.jw.hospital.endpoint.gateway.model.BaseResultModel;
 | 
												
													
														
															|  | 
 |  | import com.yihu.jw.util.common.IpUtil;
 | 
												
													
														
															|  | 
 |  | import org.apache.commons.lang.StringUtils;
 | 
												
													
														
															|  | 
 |  | import org.slf4j.Logger;
 | 
												
													
														
															|  | 
 |  | import org.slf4j.LoggerFactory;
 | 
												
													
														
															|  | 
 |  | import org.springframework.beans.factory.annotation.Autowired;
 | 
												
													
														
															|  | 
 |  | import org.springframework.stereotype.Component;
 | 
												
													
														
															|  | 
 |  | import org.springframework.web.method.HandlerMethod;
 | 
												
													
														
															|  | 
 |  | import org.springframework.web.servlet.HandlerInterceptor;
 | 
												
													
														
															|  | 
 |  | import org.springframework.web.servlet.ModelAndView;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | import javax.servlet.http.HttpServletRequest;
 | 
												
													
														
															|  | 
 |  | import javax.servlet.http.HttpServletResponse;
 | 
												
													
														
															|  | 
 |  | import java.util.Date;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | /**
 | 
												
													
														
															|  | 
 |  |  * 对外的请求拦截
 | 
												
													
														
															|  | 
 |  |  */
 | 
												
													
														
															|  | 
 |  | @Component
 | 
												
													
														
															|  | 
 |  | public class GateWayInterceptor implements HandlerInterceptor {
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     private Logger logger = LoggerFactory.getLogger(GateWayInterceptor.class);
 | 
												
													
														
															|  | 
 |  |     @Autowired
 | 
												
													
														
															|  | 
 |  |     private GcTokenDao gcTokenDaoDao;
 | 
												
													
														
															|  | 
 |  |     public static String status = "1";
 | 
												
													
														
															|  | 
 |  |     @Autowired
 | 
												
													
														
															|  | 
 |  |     private GcHttpLogDao httpLogDao;
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * preHandle:预处理回调方法
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @param request
 | 
												
													
														
															|  | 
 |  |      * @param response
 | 
												
													
														
															|  | 
 |  |      * @param handler
 | 
												
													
														
															|  | 
 |  |      * @return
 | 
												
													
														
															|  | 
 |  |      * @throws Exception
 | 
												
													
														
															|  | 
 |  |      */
 | 
												
													
														
															|  | 
 |  |     @Override
 | 
												
													
														
															|  | 
 |  |     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 | 
												
													
														
															|  | 
 |  |         boolean flag = true;
 | 
												
													
														
															|  | 
 |  |         String accesstoken = request.getHeader("accesstoken");
 | 
												
													
														
															|  | 
 |  |         String ip = IpUtil.getIpAddress(request);
 | 
												
													
														
															|  | 
 |  |         //********************************判断accesstoken********************************
 | 
												
													
														
															|  | 
 |  |         try {
 | 
												
													
														
															|  | 
 |  |             if (org.springframework.util.StringUtils.isEmpty(accesstoken)) {
 | 
												
													
														
															|  | 
 |  |                 saveHttpLog(ip, JSONObject.toJSONString(request.getParameterMap()), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_null.getMessage());
 | 
												
													
														
															|  | 
 |  |                 //没权限
 | 
												
													
														
															|  | 
 |  |                 BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_null.getCode(), BaseResultModel.statusEm.token_null.getMessage());
 | 
												
													
														
															|  | 
 |  |                 response.getOutputStream().write(JSONObject.toJSONString(baseResultModel).getBytes());
 | 
												
													
														
															|  | 
 |  |                 flag = false;
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |             GcToken gcToken = gcTokenDaoDao.findByToken(accesstoken);
 | 
												
													
														
															|  | 
 |  |             if (gcToken == null) {
 | 
												
													
														
															|  | 
 |  |                 saveHttpLog(ip, JSONObject.toJSONString(request.getParameterMap()), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_no_power.getMessage());
 | 
												
													
														
															|  | 
 |  |                 //没权限
 | 
												
													
														
															|  | 
 |  |                 BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_no_power.getCode(), BaseResultModel.statusEm.token_no_power.getMessage());
 | 
												
													
														
															|  | 
 |  |                 response.getOutputStream().write(JSONObject.toJSONString(baseResultModel).getBytes());
 | 
												
													
														
															|  | 
 |  |                 flag = false;
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |             if (gcToken.getDel() == null || gcToken.getDel() == 0) {
 | 
												
													
														
															|  | 
 |  |                 saveHttpLog(ip, JSONObject.toJSONString(request.getParameterMap()), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_out_effect.getMessage());
 | 
												
													
														
															|  | 
 |  |                 //token无效
 | 
												
													
														
															|  | 
 |  |                 BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_out_effect.getCode(), BaseResultModel.statusEm.token_out_effect.getMessage());
 | 
												
													
														
															|  | 
 |  |                 response.getOutputStream().write(JSONObject.toJSONString(baseResultModel).getBytes());
 | 
												
													
														
															|  | 
 |  |                 flag = false;
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |             if (System.currentTimeMillis() > gcToken.getOutTime().getTime()) {
 | 
												
													
														
															|  | 
 |  |                 saveHttpLog(ip, JSONObject.toJSONString(request.getParameterMap()), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), BaseResultModel.statusEm.token_out_time.getMessage());
 | 
												
													
														
															|  | 
 |  |                 //token过期
 | 
												
													
														
															|  | 
 |  |                 BaseResultModel baseResultModel = new BaseResultModel(BaseResultModel.statusEm.token_out_time.getCode(), BaseResultModel.statusEm.token_out_time.getMessage());
 | 
												
													
														
															|  | 
 |  |                 response.getOutputStream().write(JSONObject.toJSONString(baseResultModel).getBytes());
 | 
												
													
														
															|  | 
 |  |                 flag = false;
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         } catch (Exception e) {
 | 
												
													
														
															|  | 
 |  |             saveHttpLog(ip, JSONObject.toJSONString(request.getParameterMap()), null, accesstoken, request.getRequestURI(), GcHttpLog.flagEm.error.getCode(), e.getMessage());
 | 
												
													
														
															|  | 
 |  |             return false;
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         //********************************判断accesstoken********************************
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         return flag;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     /**
 | 
												
													
														
															|  | 
 |  |      * 后处理回调方法
 | 
												
													
														
															|  | 
 |  |      *
 | 
												
													
														
															|  | 
 |  |      * @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 output = "";
 | 
												
													
														
															|  | 
 |  |         if (modelAndView != null) {
 | 
												
													
														
															|  | 
 |  |             output = JSONObject.toJSONString(modelAndView.getModelMap());
 | 
												
													
														
															|  | 
 |  |         } else {
 | 
												
													
														
															|  | 
 |  |             Object returnObj = request.getAttribute("returnObj");
 | 
												
													
														
															|  | 
 |  |             if (returnObj != null) {
 | 
												
													
														
															|  | 
 |  |                 output = JSONObject.toJSONString(returnObj);
 | 
												
													
														
															|  | 
 |  |             }
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         HandlerMethod handlerMethod = (HandlerMethod) handler;
 | 
												
													
														
															|  | 
 |  | //        response.getOutputStream()
 | 
												
													
														
															|  | 
 |  |         String token = request.getHeader("accesstoken");
 | 
												
													
														
															|  | 
 |  |         String ip = IpUtil.getIpAddress(request);
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |         saveHttpLog(ip,
 | 
												
													
														
															|  | 
 |  |                 JSONObject.toJSONString(request.getParameterMap()),
 | 
												
													
														
															|  | 
 |  |                 output,
 | 
												
													
														
															|  | 
 |  |                 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 {
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     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);
 | 
												
													
														
															|  | 
 |  |         if(StringUtils.isNotEmpty(output)&&output.length() > 3000) {
 | 
												
													
														
															|  | 
 |  |             output = output.substring(0, 3000);
 | 
												
													
														
															|  | 
 |  |         }
 | 
												
													
														
															|  | 
 |  |         gcHttpLog.setOutput(output);
 | 
												
													
														
															|  | 
 |  |         gcHttpLog.setToken(token);
 | 
												
													
														
															|  | 
 |  |         gcHttpLog.setMethod(method);
 | 
												
													
														
															|  | 
 |  |         gcHttpLog.setFlag(flag);
 | 
												
													
														
															|  | 
 |  |         gcHttpLog.setMessage(message);
 | 
												
													
														
															|  | 
 |  |         httpLogDao.save(gcHttpLog);
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  |     public String getStatus() {
 | 
												
													
														
															|  | 
 |  |         return status;
 | 
												
													
														
															|  | 
 |  |     }
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | 
 |  | }
 |