#
luxiaotao1123
2023-12-19 b609de57ffd94d2e44f53e4e0031a02477331eff
#
4个文件已添加
257 ■■■■■ 已修改文件
zy-asrs-common/src/main/java/com/zy/asrs/common/config/CoolExceptionHandler.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/utils/Http.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java 165 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/WebConfig.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zy-asrs-common/src/main/java/com/zy/asrs/common/config/CoolExceptionHandler.java
New file
@@ -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());
    }
}
zy-asrs-common/src/main/java/com/zy/asrs/common/utils/Http.java
New file
@@ -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();
        }
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/AdminInterceptor.java
New file
@@ -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", "*");
    }
}
zy-asrs-wms/src/main/java/com/zy/asrs/wms/config/WebConfig.java
New file
@@ -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("/**")
                ;
    }
}