Commit d8b11b8f by guojuxing

添加操作日志工具类

parent d9ae14e3
package com.gic.enterprise.interceptor;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.dubbo.rpc.RpcContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import com.alibaba.fastjson.JSON;
import com.gic.enterprise.ano.IgnoreLogin;
import com.gic.enterprise.base.UserInfo;
import com.gic.enterprise.base.MenuInfo;
import com.gic.enterprise.constants.Constants;
import com.gic.enterprise.context.UserContext;
import com.gic.enterprise.error.ErrorCode;
import com.gic.enterprise.exception.CommonException;
import com.gic.enterprise.utils.UserDetail;
import com.gic.enterprise.utils.UserDetailUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.dubbo.rpc.RpcContext;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
public class AuthInterceptor extends HandlerInterceptorAdapter {
......@@ -53,6 +58,7 @@ public class AuthInterceptor extends HandlerInterceptorAdapter {
return true;
}
HandlerMethod handler = (HandlerMethod) object;
//免登录接口路由
IgnoreLogin ignoreLogin = handler.getMethodAnnotation(IgnoreLogin.class);
if (null != ignoreLogin) {
return true;
......@@ -60,7 +66,10 @@ public class AuthInterceptor extends HandlerInterceptorAdapter {
//获取uri
String uri = request.getRequestURI();
//操作项标志位
String isControl = request.getHeader("isControl");
//是否是操作项请求
boolean isOperationItemRequest = StringUtils.isNotBlank(isControl);
log.info("用户接口访问标志:{}", isControl);
log.info("用户接口访问路由:{}", uri);
//不需要拦截的路径
......@@ -77,16 +86,52 @@ public class AuthInterceptor extends HandlerInterceptorAdapter {
if (ignoreUriAfterLoginMap.containsKey(uri)) {
return true;
}
//增删改,即操作项类型的操作,需要 获取操作模块,一级、二级的ID和名称
if (isOperationItemRequest) {
List<MenuInfo> menuInfoList = userDetail.getMenuInfoList();
Map<String, MenuInfo> moduleUrlMap = userDetail.getModuleUrlMap();
//页面路径
String moduleUrl = request.getHeader("Referer");
log.info("完整路由:{}", moduleUrl);
//project_url_for_web + menu_url
moduleUrl = getModuleUrl(moduleUrl);
log.info("操作模块的路由:{}", moduleUrl);
//获取当前操作项数据
MenuInfo menuInfo = moduleUrlMap.get(moduleUrl);
if (menuInfo != null) {
Map<String, MenuInfo> tempMap = listToMap(menuInfoList);
Integer temp = getOperationModule(menuInfo.getMenuId(), tempMap);
//获取第二层级的页面
while (tempMap.get(temp.toString()).getLevel().intValue() != 2) {
temp = getOperationModule(tempMap.get(temp.toString()).getMenuId(), tempMap);
}
int secondLevelMenuId = tempMap.get(temp.toString()).getMenuId();
String secondLevelMenuName = tempMap.get(temp.toString()).getMenuName();
//获取第一层级的页面
temp = getOperationModule(tempMap.get(temp.toString()).getMenuId(), tempMap);
int firstLevelMenuId = tempMap.get(temp.toString()).getMenuId();
String firstLevelMenuName = tempMap.get(temp.toString()).getMenuName();
log.info("一级页面的ID和名称:{},{}", firstLevelMenuId, firstLevelMenuName);
log.info("二级页面的ID和名称:{},{}", secondLevelMenuId, secondLevelMenuName);
request.setAttribute("moduleMenuId", secondLevelMenuId);
request.setAttribute("moduleMenuName", firstLevelMenuName + "-" + secondLevelMenuId);
}
}
//超级管理员不限制
if (userDetail.getUserInfo().getSuperAdmin().intValue() == 1) {
//超级管理员不限制
return true;
}
//判断是否有权限
Map<String, Object> menuUrlMap = userDetail.getMenuUrlMap();
if (menuUrlMap == null || menuUrlMap.isEmpty()) {
throw new CommonException(ErrorCode.SYSTEM_ERROR.getErrorCode(), "sorry,您无该页面的访问权限,请联系超级管理员!");
}
if (StringUtils.isNotBlank(isControl)) {
if (isOperationItemRequest) {
//说明是操作项
//如果匹配上了,说明是没权限
if (menuUrlMap.containsKey(uri)) {
......@@ -102,4 +147,39 @@ public class AuthInterceptor extends HandlerInterceptorAdapter {
return true;
}
private static Integer getOperationModule(Integer menuId, Map<String, MenuInfo> tempMap) {
MenuInfo temp = tempMap.get(menuId.toString());
if (temp != null) {
return temp.getParentId();
}
return null;
}
private static Map<String, MenuInfo> listToMap(List<MenuInfo> list) {
Map<String, MenuInfo> map = new HashMap<>(16);
if (CollectionUtils.isNotEmpty(list)) {
for (MenuInfo menuInfo : list) {
map.put(menuInfo.getMenuId().toString(), menuInfo);
}
}
return map;
}
/**
* 截取域名后面的路径
* @param url
* @return
*/
private static String getModuleUrl(String url) {
//形如https://four.gicdev.com/damo-system/account-manage/create-admin
String regex = "/";
String[] stringArr = url.split(regex);
//去掉0、1、2
StringBuilder result = new StringBuilder();
for (int i = 3, length = stringArr.length; i < length; i ++) {
result.append(regex).append(stringArr[i]);
}
return result.toString();
}
}
package com.gic.download.utils.log;
import com.gic.download.utils.ExecutorPoolSingleton;
import com.gic.enterprise.context.RequestContext;
import com.gic.enterprise.utils.UserDetail;
import com.gic.enterprise.utils.UserDetailUtils;
import com.gic.log.api.dto.SystemSetLogDTO;
import com.gic.log.api.service.LogApiService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class LogUtils {
private static final Logger LOGGER = LogManager.getLogger(LogUtils.class);
private static LogApiService logApiService;
@Autowired
public void setLogApiService(LogApiService logApiService) {
LogUtils.logApiService = logApiService;
}
/**
* 添加日志
* @Title: createLog

* @Description:

 * @author guojuxing
* @param content 操作内容
* @param operationObject
 操作对象
* @return void


 */
public void createLog(String content, String operationObject) {
UserDetail userDetail = UserDetailUtils.getUserDetail();
SystemSetLogDTO logDTO = new SystemSetLogDTO();
//操作时间
logDTO.setCreateTime(new Date());
//操作人
logDTO.setUserId(Long.valueOf(userDetail.getUserInfo().getUserId()));
logDTO.setUserName(userDetail.getUserInfo().getUserName());
//操作内容
logDTO.setContent(content);
//操作模块
String moduleMenuName = (String) RequestContext.getContext().getRequest().getAttribute("moduleMenuName");
Integer moduleMenuId = (Integer) RequestContext.getContext().getRequest().getAttribute("moduleMenuId");
logDTO.setRelationId(Long.valueOf(moduleMenuId));
//操作对象
//账号(手机号)?
logDTO.setEnterpriesId(Long.valueOf(userDetail.getEnterpriseInfo().getEnterpriseId()));
logDTO.setEnterpriseName(userDetail.getEnterpriseInfo().getEnterpriseName());
ExecutorPoolSingleton.getInstance().executeTask(new Runnable() {
@Override
public void run() {
LOGGER.info("添加日志了,恭喜发财。");
logApiService.saveSystemSetLog(logDTO);
}
});
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment