| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- package com.java110.service.aop;
- import com.alibaba.fastjson.JSONObject;
- import com.java110.common.constant.CommonConstant;
- import com.java110.common.constant.ResponseConstant;
- import com.java110.common.exception.FilterException;
- import com.java110.core.context.IPageData;
- 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.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;
- import javax.servlet.http.Cookie;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.util.Map;
- /**
- * 数据初始化
- * Created by wuxw on 2018/5/2.
- */
- @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() {
- }
- /**
- * 初始化数据
- *
- * @param joinPoint
- * @throws Throwable
- */
- @Before("dataProcess()")
- public void deBefore(JoinPoint joinPoint) throws Throwable {
- // 接收到请求,记录请求内容
- ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
- HttpServletRequest request = attributes.getRequest();
- 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.
- StringBuffer sb = new StringBuffer();
- String str = "";
- while ((str = reader.readLine()) != null) {
- sb.append(str);
- }
- reqData = sb.toString();
- }
- //对 get情况下的参数进行封装
- 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) {
- String value = "";
- 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);
- }
- continue;
- }
- 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);
- }
- }
- // 获取组件名称 和方法名称
- 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];
- }
- }
- pd = PageData.newInstance().builder(userId, this.getToken(request), reqData, componentCode, componentMethod, url, sessionId);
- request.setAttribute(CommonConstant.CONTEXT_PAGE_DATA, pd);
- }
- @AfterReturning(returning = "ret", pointcut = "dataProcess()")
- public void doAfterReturning(Object ret) throws Throwable {
- // 处理完请求,返回内容
- }
- //后置异常通知
- @AfterThrowing("dataProcess()")
- public void throwException(JoinPoint jp) {
- }
- //后置最终通知,final增强,不管是抛出异常或者正常退出都会执行
- @After("dataProcess()")
- public void after(JoinPoint jp) throws IOException {
- // 接收到请求,记录请求内容
- 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;
- //保存日志处理
- if (pd == null) {
- return;
- }
- //写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);
- cookie.setPath("/");
- response.addCookie(cookie);
- response.flushBuffer();
- }
- }
- }
|