SynThreadPool.addAuthorityChangeSynRunnable(
new ManagerLogAccessSynRunnable(iManagerAccessLogService, logJsonObject));
package com.infosec.ztpdp.policycenter.thred;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* Title : 同步执行线程池 Description : 用于数据同步 Company : 融信
*
* @author lw
* @date 2017年2月10日 下午2:43:20
*/
public class SynThreadPool {
/** 线程池等待队列长度 ,超过50 自动丢失 */
public static final Integer POOL_WAIT_LENGTH = 50;
/** 阻塞队列 */
volatile static BlockingQueue<Runnable> POOL_CACHE = new LinkedBlockingQueue<Runnable>();
/** 批量分配用户角色岗位用户组等,触发同步同步线程池 */
private final static ThreadPoolExecutor AuthorityChange_SYN_POOL = newThreadPoolExecutor();
private static ThreadPoolExecutor newThreadPoolExecutor() {
ThreadPoolExecutor pool = new ThreadPoolExecutor(
// 核心线程数量(执行线程数量)
1,
// 线程池最大线程数量
1,
// 线程池大于 核心线程池 的时候 没有执行任务最多保持时间 (到时终止)
5L,
// 保持线程 时间 单位 。 例如此刻是5分钟(分钟)
TimeUnit.MINUTES,
// 阻塞列队,用于等待线程
POOL_CACHE,
/*
* 拒绝策略: 自定义:SynRejectedExecutionHandler
* 默认 :由调用线程处理该任务
*/
new ThreadPoolExecutor.CallerRunsPolicy());
pool.allowCoreThreadTimeOut(true);
return pool;
}
/** 线程池里的任务线程名称 */
volatile static List<String> RUN_CACHE = new ArrayList<String>();
/** 删除线程池里任务名称 */
public static synchronized void remove(final String taskName) {
RUN_CACHE.remove(taskName);
}
/** 线程池里是否包含任务名称 */
public static boolean contains(String taskName) {
return RUN_CACHE.contains(taskName);
}
/** 批量分配用户角色岗位用户组等,触发同步 */
public static void addAuthorityChangeSynRunnable(ManagerLogAccessSynRunnable authorityChangeSynRunnable) {
AuthorityChange_SYN_POOL.execute(authorityChangeSynRunnable);
}
}
package com.infosec.ztpdp.policycenter.thred;
import java.util.Date;
import org.drools.core.util.StringUtils;
import com.alibaba.fastjson.JSONObject;
import com.infosec.ztpdp.policycenter.common.dbbase.snowflake.IdWorkerBuilder;
import com.infosec.ztpdp.policycenter.common.util.Const;
import com.infosec.ztpdp.policycenter.common.util.deciphering.EncryptionFactory;
import com.infosec.ztpdp.policycenter.common.util.log.LogConst;
import com.infosec.ztpdp.policycenter.module.audit.entity.ManagerAccessLogBean;
import com.infosec.ztpdp.policycenter.module.audit.service.IManagerAccessLogService;
/**
*
* <p>
* 管理员登录日志线程记录
* </p>
*
* <p>
* 版权所有:北京信安世纪科技股份有限公司 (c) 2022
* </p>
*
* @author jlcui
* @date: 2023年8月29日 上午11:39:46
*
*/
public class ManagerLogAccessSynRunnable implements Runnable{
private IManagerAccessLogService iManagerAccessLogService;
/**
* 存储日志数据
*/
private JSONObject jsonObject;
public ManagerLogAccessSynRunnable(final IManagerAccessLogService iManagerAccessLogService,final JSONObject jsonObject) {
this.iManagerAccessLogService = iManagerAccessLogService;
this.jsonObject = jsonObject;
}
@Override
public void run() {
try {
if(!jsonObject.isEmpty()) {
ManagerAccessLogBean log = new ManagerAccessLogBean();
log.setId(IdWorkerBuilder.ID_WORKER.nextId());
log.setLoginname(jsonObject.getString(LogConst.LOG_LOGINNAME));
log.setUsername(jsonObject.getString(LogConst.LOG_USERNAME));
log.setLogcode(jsonObject.getString(LogConst.LOG_LOGCODE));
log.setUserip(jsonObject.getString(LogConst.LOG_CLIENTIP));
log.setCreateDate(new Date());
log.setOperation(jsonObject.getInteger(LogConst.LOG_HOWS));
log.setDetails(jsonObject.getString(LogConst.LOG_EVENTDES));
log.setResult(jsonObject.getInteger(LogConst.LOG_RESULT));
//数据加密
String dataEncryption = log.getLoginname()+log.getUsername()+log.getLogcode()+log.getUserip()+log.getOperation()+log.getDetails()+log.getResult();
log.setSignature(EncryptionFactory.getEncryptions(Const.AUDIT_ENCRYPTION_MODE).encrypt(dataEncryption));
iManagerAccessLogService.insert(log);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}