From b609de57ffd94d2e44f53e4e0031a02477331eff Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期二, 19 十二月 2023 16:25:39 +0800 Subject: [PATCH] # --- zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java | 165 +++++++++++++++++++++++++++++++++ zy-asrs-common/src/main/java/com/zy/asrs/common/utils/Http.java | 30 ++++++ zy-asrs-common/src/main/java/com/zy/asrs/common/config/CoolExceptionHandler.java | 38 +++++++ zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/WebConfig.java | 24 ++++ 4 files changed, 257 insertions(+), 0 deletions(-) diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/config/CoolExceptionHandler.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/config/CoolExceptionHandler.java new file mode 100644 index 0000000..04acdcf --- /dev/null +++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/config/CoolExceptionHandler.java @@ -0,0 +1,38 @@ +package com.zy.asrs.common.config; + +import com.zy.asrs.framework.common.R; +import com.zy.asrs.framework.exception.CoolException; +import org.springframework.web.HttpRequestMethodNotSupportedException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import org.springframework.web.method.HandlerMethod; + +/** + * Created by vincent on 2019-06-09 + */ +@RestControllerAdvice +public class CoolExceptionHandler { + + @ExceptionHandler(Exception.class) + public R handlerException(HandlerMethod handler, Exception e) { + e.printStackTrace(); + return R.error(); + } + + @ExceptionHandler(HttpRequestMethodNotSupportedException.class) + public R handleHttpRequestMethodNotSupportedException(HttpRequestMethodNotSupportedException e) { + return R.error(); + } + + @ExceptionHandler(CoolException.class) + public R handleRRException(CoolException e) { + String[] split = e.getMessage().split("-"); + if (split.length == 2) { + if (String.valueOf(split[0]).length() < 3) { + return R.parse(e.getMessage()); + } + } + return R.error(e.getMessage()); + } + +} diff --git a/zy-asrs-common/src/main/java/com/zy/asrs/common/utils/Http.java b/zy-asrs-common/src/main/java/com/zy/asrs/common/utils/Http.java new file mode 100644 index 0000000..aae6e29 --- /dev/null +++ b/zy-asrs-common/src/main/java/com/zy/asrs/common/utils/Http.java @@ -0,0 +1,30 @@ +package com.zy.asrs.common.utils; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.zy.asrs.framework.common.R; + +import javax.servlet.http.HttpServletResponse; +import java.io.PrintWriter; + +/** + * Created by vincent on 2019-08-01 + */ +public class Http { + + public static void response(HttpServletResponse response, String baseRes){ + response.setCharacterEncoding("utf-8"); + response.setContentType("application/json; charset=utf-8"); + try (PrintWriter out = response.getWriter()) { + R r = R.parse(baseRes); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("total", "0"); + jsonObject.put("record", ""); + r.add(jsonObject); + out.print(JSON.toJSONString(r)); + out.flush(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java new file mode 100644 index 0000000..8ba613d --- /dev/null +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java @@ -0,0 +1,165 @@ +package com.zy.asrs.wms.config; + +import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.zy.asrs.common.properties.SystemProperties; +import com.zy.asrs.common.sys.entity.OperateLog; +import com.zy.asrs.common.sys.entity.User; +import com.zy.asrs.common.sys.entity.UserLogin; +import com.zy.asrs.common.sys.service.OperateLogService; +import com.zy.asrs.common.sys.service.UserLoginService; +import com.zy.asrs.common.sys.service.UserService; +import com.zy.asrs.common.utils.Http; +import com.zy.asrs.framework.annotations.AppAuth; +import com.zy.asrs.framework.annotations.ManagerAuth; +import com.zy.asrs.framework.common.BaseRes; +import com.zy.asrs.framework.common.Cools; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.lang.Nullable; +import org.springframework.stereotype.Component; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.lang.reflect.Method; +import java.util.Date; + +/** + * Created by vincent on 2019-06-13 + */ +@Component +public class AdminInterceptor extends HandlerInterceptorAdapter { + + @Value("${super.pwd}") + private String superPwd; + @Autowired + private UserService userService; + @Autowired + private UserLoginService userLoginService; + @Autowired + private OperateLogService operateLogService; + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + cors(response); + if (handler instanceof org.springframework.web.servlet.resource.ResourceHttpRequestHandler) { + return true; + } + // super璐﹀彿 + String token = request.getHeader("token"); + if (token!=null) { + String deToken = Cools.deTokn(token, superPwd); + if (deToken!=null){ + long timestamp = Long.parseLong(deToken.substring(0, 13)); + // 1澶╁悗杩囨湡 + if (System.currentTimeMillis() - timestamp > 86400000){ + Http.response(response, BaseRes.DENIED); + return false; + } + if ("super".equals(deToken.substring(13))) { + request.setAttribute("userId", 9527); + return true; + } + } + } + // 鐧藉悕鍗� +// if (IpTools.gainRealIp(request).equals("127.0.0.1")) { +// request.setAttribute("userId", 9527); +// return true; +// } + // 璺ㄥ煙璁剧疆 + // response.setHeader("Access-Control-Allow-Origin", "*"); + HandlerMethod handlerMethod = (HandlerMethod) handler; + Method method = handlerMethod.getMethod(); + if (method.isAnnotationPresent(AppAuth.class)){ + AppAuth annotation = method.getAnnotation(AppAuth.class); + if (annotation.value().equals(AppAuth.Auth.CHECK)){ + request.setAttribute("appAuth", annotation.memo()); + } + } + if (method.isAnnotationPresent(ManagerAuth.class)){ + ManagerAuth annotation = method.getAnnotation(ManagerAuth.class); + if (annotation.value().equals(ManagerAuth.Auth.CHECK)){ + return check(request, response, annotation.memo()); + } + } + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) { + Object obj = request.getAttribute("operateLog"); + if (obj instanceof OperateLog) { + OperateLog operate = (OperateLog) obj; + operate.setResponse(String.valueOf(response.getStatus())); + operateLogService.save(operate); + } + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception { +// Object r = request.getAttribute("cool-response"); + } + + private boolean check(HttpServletRequest request, HttpServletResponse response, String memo) { + try { + String token = request.getHeader("token"); + UserLogin userLogin = userLoginService.getOne(new LambdaQueryWrapper<UserLogin>().eq(UserLogin::getToken, token)); + if (null == userLogin){ + Http.response(response, BaseRes.DENIED); + return false; + } + User user = userService.getById(userLogin.getUserId()); +// String deToken = Cools.deTokn(token, user.getPassword()); +// long timestamp = Long.parseLong(deToken.substring(0, 13)); + // 15鍒嗛挓鍚庤繃鏈� + if (System.currentTimeMillis() - userLogin.getCreateTime().getTime() > 900000){ + Http.response(response, BaseRes.DENIED); + return false; + } + // 璇锋眰缂撳瓨 + request.setAttribute("userId", user.getId()); + // 鏇存柊 token 鏈夋晥鏈� + userLogin.setCreateTime(new Date()); + userLoginService.updateById(userLogin); + // 鎿嶄綔鏃ュ織 + if (!Cools.isEmpty(memo)) { + // 杩涜婵�娲诲垽鏂� + if (!SystemProperties.SYSTEM_ACTIVATION) { + Http.response(response, BaseRes.NO_ACTIVATION); + return false; + } + // 璁板綍鎿嶄綔鏃ュ織 + OperateLog operateLog = new OperateLog(); + operateLog.setAction(Cools.isEmpty(memo)?request.getRequestURI():memo); + operateLog.setIp(request.getRemoteAddr()); + operateLog.setUserId(user.getId()); + operateLog.setRequest(JSON.toJSONString(request.getParameterMap())); + request.setAttribute("operateLog", operateLog); + } + return true; + } catch (Exception e){ + Http.response(response, BaseRes.DENIED); + return false; + } + + } + + + /** + * 璺ㄥ煙 + */ + public static void cors(HttpServletResponse response){ + // 璺ㄥ煙璁剧疆 + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Methods", "*"); + response.setHeader("Access-Control-Allow-Headers", "Content-Type,Access-Token"); + response.setHeader("Access-Control-Expose-Headers", "*"); + + } + +} diff --git a/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/WebConfig.java b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/WebConfig.java new file mode 100644 index 0000000..ccd1ddd --- /dev/null +++ b/zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/WebConfig.java @@ -0,0 +1,24 @@ +package com.zy.asrs.wms.config; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * Created by vincent on 2019-06-13 + */ +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Autowired + private AdminInterceptor adminInterceptor; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(adminInterceptor) + .addPathPatterns("/**") + ; + } + +} -- Gitblit v1.9.1