//package com.cftech.sys.controller;
//
//import com.alibaba.fastjson.JSONObject;
//import com.cftech.core.config.MpGlobalConfig;
//import com.cftech.sys.filter.McCsrfTokenRepository;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.core.MethodParameter;
//import org.springframework.http.HttpMethod;
//import org.springframework.http.MediaType;
//import org.springframework.http.server.ServerHttpRequest;
//import org.springframework.http.server.ServerHttpResponse;
//import org.springframework.http.server.ServletServerHttpRequest;
//import org.springframework.http.server.ServletServerHttpResponse;
//import org.springframework.security.web.csrf.CsrfToken;
//import org.springframework.web.bind.annotation.ControllerAdvice;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.ResponseBody;
//import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.lang.reflect.Method;
//
///**
// *  取消针对移动端刷新TOKEN，移动端TOKEN CSRF TOKEN刷新 采用单独的JWT进行开发
// * Created by Jasper Huang on 2018/6/4.
// */
////@ControllerAdvice
//public class McResponseBodyController implements ResponseBodyAdvice {
//    private static Logger logger = LoggerFactory.getLogger(McResponseBodyController.class);
//    @Autowired
//    private McCsrfTokenRepository mcCsrfTokenRepository;
//    @Override
//    public boolean supports(MethodParameter methodParameter, Class aClass) {
//
//        boolean isBackEnd = false;
//       if(aClass.isAnnotationPresent(RequestMapping.class))
//       {
//           RequestMapping oo =  (RequestMapping) aClass.getAnnotation(RequestMapping.class);
//           if(oo!=null)
//           {
//               String[] requestUrl = oo.value();
//               if(requestUrl!=null)
//               {
//                   for(String str:requestUrl)
//                   {
//                        if(str.startsWith("/a"))
//                        {
//                            isBackEnd = true;
//                            break;
//                        }
//                   }
//               }
//           }
//       }
//       if(isBackEnd)
//       {
//           Method method = methodParameter.getMethod();
//           boolean rbMethod = false;
//           try
//           {
//               if(method.isAnnotationPresent(ResponseBody.class))
//               {
//                   rbMethod = true;
//               }else
//               {
//                   return false;
//               }
//               if(method.isAnnotationPresent(RequestMapping.class))
//               {
//                   RequestMapping rm = method.getAnnotation(RequestMapping.class);
//                   RequestMethod[] methodInfo = rm.method();
//                   if(methodInfo!=null)
//                   {
//                       for(RequestMethod me:methodInfo)
//                       {
//                           if(RequestMethod.POST==me)
//                           {
//                               if(rbMethod)
//                               {
//                                   return true;
//                               }
//                           }
//                       }
//                   }
//               }
//           }catch (Exception e)
//           {
//               logger.error("拦截器获取返回RESPONSE BODY数据：",e);
//           }
//       }
//        return false;
//    }
//
//    @Override
//    public Object beforeBodyWrite(Object o, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {
////        return null;
//        if (  serverHttpRequest.getMethod() == HttpMethod.POST) {
//            if (o instanceof JSONObject) {
//                if (MpGlobalConfig.TOKEN_REFRESH) {
//                    CsrfToken token = getCsrfToekn(serverHttpRequest,serverHttpResponse);
//                    JSONObject rtnJson = (JSONObject) o;
//                    rtnJson.put("_csrf_header", token.getHeaderName());
//                    rtnJson.put("_csrf", token.getToken());
//                    return rtnJson;
//                }else
//                {
//                    return o;
//                }
//            } else if (o instanceof net.sf.json.JSONObject) {
//                if (MpGlobalConfig.TOKEN_REFRESH) {
//                    CsrfToken token = getCsrfToekn( serverHttpRequest,serverHttpResponse);
//                    net.sf.json.JSONObject rtnJson = (net.sf.json.JSONObject) o;
//                    rtnJson.put("_csrf_header", token.getHeaderName());
//                    rtnJson.put("_csrf", token.getToken());
//                    return rtnJson;
//                }
//                else
//                {
//                    return o;
//                }
//            } else if (o instanceof org.json.JSONObject) {
//                CsrfToken token = getCsrfToekn(serverHttpRequest,serverHttpResponse);
//                org.json.JSONObject rtnJson = (org.json.JSONObject) o;
//                rtnJson.put("_csrf_header", token.getHeaderName());
//                rtnJson.put("_csrf", token.getToken());
//                return rtnJson;
//            } else {
//                return o;
//            }
//        }else {
//            return o;
//        }
//    }
//
//    private CsrfToken getCsrfToekn(ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse)
//    {
//        HttpServletRequest  request = ((ServletServerHttpRequest)serverHttpRequest).getServletRequest();
//        HttpServletResponse response = ((ServletServerHttpResponse)serverHttpResponse).getServletResponse();
//        CsrfToken token = mcCsrfTokenRepository.generateTokenWithSave(request, response);
//        return token;
//    }
//}
