package com.zy.asrs.openapi.config; 
 | 
  
 | 
import com.zy.asrs.common.sys.entity.OperateLog; 
 | 
import com.zy.asrs.common.sys.service.OperateLogService; 
 | 
import com.zy.asrs.framework.annotations.AppAuth; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
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; 
 | 
  
 | 
@Component 
 | 
public class AdminInterceptor extends HandlerInterceptorAdapter { 
 | 
  
 | 
    @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; 
 | 
        } 
 | 
        // 跨域设置 
 | 
        // 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()); 
 | 
            } 
 | 
        } 
 | 
        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"); 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 跨域 
 | 
     */ 
 | 
    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", "*"); 
 | 
  
 | 
    } 
 | 
  
 | 
} 
 |