java110-service/src/main/java/com/java110/service/aop/PageProcessAspect.java
@@ -1,15 +1,16 @@
package com.java110.service.aop;
import com.alibaba.fastjson.JSONObject;
import com.java110.common.constant.CommonConstant;
import com.java110.core.factory.PageDataFactory;
import com.java110.common.util.Assert;
import com.java110.core.factory.GenerateCodeFactory;
import com.java110.common.util.StringUtil;
import com.java110.entity.service.PageData;
import com.java110.utils.constant.CommonConstant;
import com.java110.utils.exception.FilterException;
import com.java110.core.context.IPageData;
import com.java110.utils.util.StringUtil;
import com.java110.core.context.PageData;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -30,8 +31,12 @@
@Aspect
@Component
public class PageProcessAspect {
    private static Logger logger = LoggerFactory.getLogger(PageProcessAspect.class);
    @Pointcut("execution(public * com.java110..*.*Controller.*(..)) || execution(public * com.java110..*.*Rest.*(..))")
    public void dataProcess(){}
    public void dataProcess() {
    }
    /**
     * 初始化数据
@@ -45,8 +50,11 @@
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        PageData pd = null;
        if("POST".equals(request.getMethod())){
        IPageData pd = null;
        String reqData = "";
        String userId = "";
        String sessionId = request.getSession().getId();
        if ("POST,PUT".contains(request.getMethod())) {
            InputStream in = request.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            //reader.
@@ -55,41 +63,57 @@
            while ((str = reader.readLine()) != null) {
                sb.append(str);
            }
            str = sb.toString();
            if(Assert.isPageJsonObject(str)){
                 pd = PageDataFactory.newInstance().builder(str).setTransactionId(GenerateCodeFactory.getPageTransactionId());
            }
            reqData = sb.toString();
        }
        //对 get情况下的参数进行封装
        if(pd == null){
            pd = PageDataFactory.newInstance().setTransactionId(GenerateCodeFactory.getPageTransactionId());
            Map<String,String[]> params = request.getParameterMap();
            if(params != null  && !params.isEmpty()) {
        else {
            Map<String, String[]> params = request.getParameterMap();
            if (params != null && !params.isEmpty()) {
                JSONObject paramObj = new JSONObject();
                for(String key : params.keySet()) {
                    if(params.get(key).length>0){
                for (String key : params.keySet()) {
                    if (params.get(key).length > 0) {
                        String value = "";
                        for(int paramIndex = 0 ; paramIndex < params.get(key).length;paramIndex++) {
                        for (int paramIndex = 0; paramIndex < params.get(key).length; paramIndex++) {
                            value = params.get(key)[paramIndex] + ",";
                        }
                        value = value.endsWith(",")?value.substring(0,value.length()-1):value;
                        paramObj.put(key,value);
                        value = value.endsWith(",") ? value.substring(0, value.length() - 1) : value;
                        paramObj.put(key, value);
                    }
                    continue;
                }
                pd.setParam(paramObj);
                reqData = paramObj.toJSONString();
            }
        }
        // 获取 userId
        if (request.getAttribute("claims") != null && request.getAttribute("claims") instanceof Map) {
            Map<String, String> userInfo = (Map<String, String>) request.getAttribute("claims");
            if (userInfo.containsKey(CommonConstant.LOGIN_USER_ID)) {
                userId = userInfo.get(CommonConstant.LOGIN_USER_ID);
            }
        }
        if(request.getAttribute("claims") != null && request.getAttribute("claims") instanceof Map){
            Map<String,String> userInfo = (Map<String,String>)request.getAttribute("claims");
            if(userInfo.containsKey(CommonConstant.LOGIN_USER_ID)){
                pd.setUserId(userInfo.get(CommonConstant.LOGIN_USER_ID));
            }
            pd.setUserInfo(userInfo);
        // 获取组件名称 和方法名称
        String url = request.getRequestURL() != null ? request.getRequestURL().toString() : "";
        String componentCode = "";
        String componentMethod = "";
        if (url.contains("callComponent")) { //组件处理
            String[] urls = url.split("/");
            if (urls.length == 6) {
                componentCode = urls[4];
                componentMethod = urls[5];
            }
        } else if (url.contains("flow")) { //流程处理
            String[] urls = url.split("/");
            if (urls.length == 5) {
                componentCode = urls[4];
            }
        }
        request.setAttribute(CommonConstant.CONTEXT_PAGE_DATA,pd);
        pd = PageData.newInstance().builder(userId, this.getToken(request), reqData, componentCode, componentMethod, url, sessionId);
        request.setAttribute(CommonConstant.CONTEXT_PAGE_DATA, pd);
    }
@@ -100,7 +124,7 @@
    //后置异常通知
    @AfterThrowing("dataProcess()")
    public void throwException(JoinPoint jp){
    public void throwException(JoinPoint jp) {
    }
    //后置最终通知,final增强,不管是抛出异常或者正常退出都会执行
@@ -110,13 +134,60 @@
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        PageData pd =request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA) != null ?(PageData)request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA):null ;
        PageData pd = request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA) != null ? (PageData) request.getAttribute(CommonConstant.CONTEXT_PAGE_DATA) : null;
        //保存日志处理
        if(pd == null){
            return ;
        if (pd == null) {
            return;
        }
        if(!StringUtil.isNullOrNone(pd.getToken())) {
        //写cookies信息
        writeCookieInfo(pd, attributes);
    }
    //环绕通知,环绕增强,相当于MethodInterceptor
    @Around("dataProcess()")
    public Object around(ProceedingJoinPoint pjp) {
        try {
            Object o = pjp.proceed();
            return o;
        } catch (Throwable e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     * 获取TOKEN
     *
     * @param request
     * @return
     */
    private String getToken(HttpServletRequest request) throws FilterException {
        String token = "";
        if (request.getCookies() == null || request.getCookies().length == 0) {
            return token;
        }
        for (Cookie cookie : request.getCookies()) {
            if (CommonConstant.COOKIE_AUTH_TOKEN.equals(cookie.getName())) {
                token = cookie.getValue();
            }
        }
        return token;
    }
    /**
     * 写cookie 信息
     *
     * @param pd         页面封装信息
     * @param attributes
     * @throws IOException
     */
    private void writeCookieInfo(IPageData pd, ServletRequestAttributes attributes) throws IOException {
        // 这里目前只写到组件级别,如果需要 写成方法级别
        if (!StringUtil.isNullOrNone(pd.getToken()) && "login".equals(pd.getComponentCode())) {
            HttpServletResponse response = attributes.getResponse();
            Cookie cookie = new Cookie(CommonConstant.COOKIE_AUTH_TOKEN, pd.getToken());
            cookie.setHttpOnly(true);
@@ -125,17 +196,5 @@
            response.flushBuffer();
        }
    }
    //环绕通知,环绕增强,相当于MethodInterceptor
    @Around("dataProcess()")
    public Object around(ProceedingJoinPoint pjp) {
        try {
            Object o =  pjp.proceed();
            return o;
        } catch (Throwable e) {
            e.printStackTrace();
            return null;
        }
    }
}