|  | @ -1,153 +0,0 @@
 | 
												
													
														
															|  | package com.yihu.jw.patient.interceptor;
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | import com.yihu.jw.entity.base.security.Token;
 |  | 
 | 
												
													
														
															|  | import com.yihu.jw.patient.constant.SystemConstant;
 |  | 
 | 
												
													
														
															|  | import com.yihu.jw.patient.log.InterfaceCallLogs;
 |  | 
 | 
												
													
														
															|  | import com.yihu.jw.util.date.DateUtil;
 |  | 
 | 
												
													
														
															|  | import com.yihu.jw.utils.SystemData;
 |  | 
 | 
												
													
														
															|  | import org.apache.commons.lang3.StringUtils;
 |  | 
 | 
												
													
														
															|  | import org.json.JSONObject;
 |  | 
 | 
												
													
														
															|  | import org.slf4j.Logger;
 |  | 
 | 
												
													
														
															|  | import org.slf4j.LoggerFactory;
 |  | 
 | 
												
													
														
															|  | import org.springframework.beans.factory.annotation.Value;
 |  | 
 | 
												
													
														
															|  | import org.springframework.stereotype.Component;
 |  | 
 | 
												
													
														
															|  | import org.springframework.web.bind.annotation.RequestMapping;
 |  | 
 | 
												
													
														
															|  | import org.springframework.web.method.HandlerMethod;
 |  | 
 | 
												
													
														
															|  | import org.springframework.web.servlet.ModelAndView;
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | import javax.servlet.http.HttpServletRequest;
 |  | 
 | 
												
													
														
															|  | import javax.servlet.http.HttpServletResponse;
 |  | 
 | 
												
													
														
															|  | import java.lang.reflect.Method;
 |  | 
 | 
												
													
														
															|  | import java.util.Date;
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  | /**
 |  | 
 | 
												
													
														
															|  |  * 患者权限校验
 |  | 
 | 
												
													
														
															|  |  *
 |  | 
 | 
												
													
														
															|  |  * @author George
 |  | 
 | 
												
													
														
															|  |  */
 |  | 
 | 
												
													
														
															|  | @Component
 |  | 
 | 
												
													
														
															|  | public class PatientInterceptor extends BaseInterceptor {
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     private Logger logger = LoggerFactory.getLogger(PatientInterceptor.class);
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     public static String status = "1";
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     @Override
 |  | 
 | 
												
													
														
															|  |     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
 |  | 
 | 
												
													
														
															|  |         boolean flag = true;
 |  | 
 | 
												
													
														
															|  |         if(Flag.close.getValue().equals(status)){
 |  | 
 | 
												
													
														
															|  |             return true;
 |  | 
 | 
												
													
														
															|  |         }
 |  | 
 | 
												
													
														
															|  |         try {
 |  | 
 | 
												
													
														
															|  |             request.setCharacterEncoding("UTF-8");
 |  | 
 | 
												
													
														
															|  |             response.setHeader("Content-type", "text/html;charset=UTF-8");
 |  | 
 | 
												
													
														
															|  |             request.setAttribute("log-start", new Date().getTime());
 |  | 
 | 
												
													
														
															|  |             response.setCharacterEncoding("UTF-8");
 |  | 
 | 
												
													
														
															|  |             JSONObject json = getAgent(request);
 |  | 
 | 
												
													
														
															|  |             logger.debug("userAgent:" + json);
 |  | 
 | 
												
													
														
															|  |             if (json == null) {
 |  | 
 | 
												
													
														
															|  |                 // 未登录
 |  | 
 | 
												
													
														
															|  |                 response.getOutputStream().write(error(SystemConstant.NOT_LOGIN, "请登录后再操作!").getBytes("UTF-8"));
 |  | 
 | 
												
													
														
															|  |                 return false;
 |  | 
 | 
												
													
														
															|  |             }
 |  | 
 | 
												
													
														
															|  |             String tokenStr = json.has("token") ? json.getString("token") : "";
 |  | 
 | 
												
													
														
															|  |             String user = json.has("uid") ? json.getString("uid") : "";
 |  | 
 | 
												
													
														
															|  |             String imei = json.has("imei") ? json.getString("imei") : "";
 |  | 
 | 
												
													
														
															|  |             String openid = json.has("openid") ? json.getString("openid") : "";
 |  | 
 | 
												
													
														
															|  |             int platform = json.has("platform") ? json.getInt("platform") : 1;
 |  | 
 | 
												
													
														
															|  |             logger.debug("tokenStr:" + tokenStr);
 |  | 
 | 
												
													
														
															|  |             logger.debug("uid:" + user);
 |  | 
 | 
												
													
														
															|  |             logger.debug("imei:" + imei);
 |  | 
 | 
												
													
														
															|  |             logger.debug("openid:" + openid);
 |  | 
 | 
												
													
														
															|  |             logger.debug("platform:" + platform);
 |  | 
 | 
												
													
														
															|  |             if (StringUtils.isEmpty(imei)) {
 |  | 
 | 
												
													
														
															|  |                 imei = openid;
 |  | 
 | 
												
													
														
															|  |             }
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |             Token token = null;
 |  | 
 | 
												
													
														
															|  |             if (platform == 3) {
 |  | 
 | 
												
													
														
															|  |                 token = SystemData.patientTokens.get(user);
 |  | 
 | 
												
													
														
															|  |             }
 |  | 
 | 
												
													
														
															|  |             if (token == null) {
 |  | 
 | 
												
													
														
															|  |                 token = tokenDao.findByPatient(user, platform);
 |  | 
 | 
												
													
														
															|  |                 // 加入缓存
 |  | 
 | 
												
													
														
															|  |                 if (platform == 3) {
 |  | 
 | 
												
													
														
															|  |                     SystemData.patientTokens.put(user, token);
 |  | 
 | 
												
													
														
															|  |                 }
 |  | 
 | 
												
													
														
															|  |             }
 |  | 
 | 
												
													
														
															|  |             if (token == null || StringUtils.isEmpty(tokenStr) || (token.getPlatform() != 1 && token.getPlatform() != 3)) {
 |  | 
 | 
												
													
														
															|  |                 // 未登录
 |  | 
 | 
												
													
														
															|  |                 response.getOutputStream().write(error(SystemConstant.NOT_LOGIN, "请登录后再操作!").getBytes("UTF-8"));
 |  | 
 | 
												
													
														
															|  |                 flag = false;
 |  | 
 | 
												
													
														
															|  |             } else {
 |  | 
 | 
												
													
														
															|  |                 if (!StringUtils.equals(tokenStr, token.getToken()) || !StringUtils.equals(user, token.getUser()) || !StringUtils.equals(imei, token.getImei())) {
 |  | 
 | 
												
													
														
															|  |                     // 别处登录
 |  | 
 | 
												
													
														
															|  |                     response.getOutputStream().write(error(SystemConstant.LOGIN_OTHER, "帐号在别处登录,请重新登录").getBytes("UTF-8"));
 |  | 
 | 
												
													
														
															|  |                     flag = false;
 |  | 
 | 
												
													
														
															|  |                 } else {
 |  | 
 | 
												
													
														
															|  |                     // 一天只更新一次
 |  | 
 | 
												
													
														
															|  |                     if (DateUtil.getDays(token.getCzrq(), DateUtil.getNowDateShort()) != 0) {
 |  | 
 | 
												
													
														
															|  |                         // 今天未更新,则更新缓存
 |  | 
 | 
												
													
														
															|  |                         token.setCzrq(new Date());
 |  | 
 | 
												
													
														
															|  |                         // 更新内存
 |  | 
 | 
												
													
														
															|  |                         if (platform == 3) {
 |  | 
 | 
												
													
														
															|  |                             SystemData.patientTokens.put(user, token);
 |  | 
 | 
												
													
														
															|  |                         }
 |  | 
 | 
												
													
														
															|  |                         // 更新数据库
 |  | 
 | 
												
													
														
															|  |                         tokenDao.save(token);
 |  | 
 | 
												
													
														
															|  |                     }
 |  | 
 | 
												
													
														
															|  |                 }
 |  | 
 | 
												
													
														
															|  |             }
 |  | 
 | 
												
													
														
															|  |         } catch (Exception e) {
 |  | 
 | 
												
													
														
															|  |             e.printStackTrace();
 |  | 
 | 
												
													
														
															|  |         }
 |  | 
 | 
												
													
														
															|  |         return flag;
 |  | 
 | 
												
													
														
															|  |     }
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     @Override
 |  | 
 | 
												
													
														
															|  |     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
 |  | 
 | 
												
													
														
															|  |         if (null == request.getAttribute("log-start")) {
 |  | 
 | 
												
													
														
															|  |             return;
 |  | 
 | 
												
													
														
															|  |         }
 |  | 
 | 
												
													
														
															|  |         long start = (long) request.getAttribute("log-start");
 |  | 
 | 
												
													
														
															|  |         long end = new Date().getTime();
 |  | 
 | 
												
													
														
															|  |         Class cls = ((HandlerMethod) handler).getBeanType();
 |  | 
 | 
												
													
														
															|  |         RequestMapping clsRm = (RequestMapping) cls.getAnnotation(RequestMapping.class);
 |  | 
 | 
												
													
														
															|  |         Method method = ((HandlerMethod) handler).getMethod();
 |  | 
 | 
												
													
														
															|  |         RequestMapping mthRm = method.getAnnotation(RequestMapping.class);
 |  | 
 | 
												
													
														
															|  |         String url = "";
 |  | 
 | 
												
													
														
															|  |         String urlCls = "";
 |  | 
 | 
												
													
														
															|  |         String urlMth = "";
 |  | 
 | 
												
													
														
															|  |         if (clsRm.value() != null && clsRm.value().length > 0) {
 |  | 
 | 
												
													
														
															|  |             urlCls = clsRm.value()[0];
 |  | 
 | 
												
													
														
															|  |         }
 |  | 
 | 
												
													
														
															|  |         if (mthRm.value() != null && mthRm.value().length > 0) {
 |  | 
 | 
												
													
														
															|  |             urlMth = mthRm.value()[0];
 |  | 
 | 
												
													
														
															|  |         }
 |  | 
 | 
												
													
														
															|  |         if (StringUtils.isNotEmpty(urlCls)) {
 |  | 
 | 
												
													
														
															|  |             url += urlCls.startsWith("/") ? urlCls : ("/" + urlCls);
 |  | 
 | 
												
													
														
															|  |         }
 |  | 
 | 
												
													
														
															|  |         if (StringUtils.isNotEmpty(urlMth)) {
 |  | 
 | 
												
													
														
															|  |             url += urlMth.startsWith("/") ? urlMth : ("/" + urlMth);
 |  | 
 | 
												
													
														
															|  |         }
 |  | 
 | 
												
													
														
															|  |         url = url.replace("\\", "/").replace("//", "/");
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |         JSONObject json = getAgent(request);
 |  | 
 | 
												
													
														
															|  |         String uid = json.has("uid") ? json.getString("uid") : "";
 |  | 
 | 
												
													
														
															|  |         InterfaceCallLogs.info(end - start, url, uid, new JSONObject(request.getParameterMap()).toString());
 |  | 
 | 
												
													
														
															|  |     }
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     @Override
 |  | 
 | 
												
													
														
															|  |     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     }
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     public  String getStatus() {
 |  | 
 | 
												
													
														
															|  |         return status;
 |  | 
 | 
												
													
														
															|  |     }
 |  | 
 | 
												
													
														
															|  | 
 |  | 
 | 
												
													
														
															|  |     @Value("${interceptor.patient.status}")
 |  | 
 | 
												
													
														
															|  |     public  void setStatus(String status) {
 |  | 
 | 
												
													
														
															|  |         PatientInterceptor.status = status;
 |  | 
 | 
												
													
														
															|  |     }
 |  | 
 | 
												
													
														
															|  | }
 |  | 
 |