package com.infosec.warning.component;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
@Component
public class SchedulerWarningComponent implements ApplicationRunner{
@Autowired
private NetAuthWarningUtil netAuthWarningUtil;
@Override
public void run(ApplicationArguments args) throws Exception {
//启动弱密码检测预警通知
netAuthWarningUtil.warningAndNoticeWeakPasswordWithSchedulerEvent();
//启动在线用户检测预警通知
netAuthWarningUtil.warningAndNoticeOnlineUserWithSchedulerEvent();
//启动cpu使用率预警通知
netAuthWarningUtil.warningAndCpuWithSchedulerEvent();
//启动内存使用率预警通知
netAuthWarningUtil.warningAndMemoryWithSchedulerEvent();
}
}
package com.infosec.warning.component;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.infosec.user.entity.UserExtensionBean;
import com.infosec.user.service.user.IUserExtensionService;
import com.infosec.warning.abs.NetAuthWarningNotice;
import com.infosec.warning.abs.NetAuthWarningNoticeEventType;
import com.infosec.warning.abs.impl.NetAuthFrequentlyLoginWarning;
import com.infosec.warning.abs.impl.NetAuthLoginErrorWarning;
import com.infosec.warning.abs.impl.NetAuthModifyPasswordWarning;
import com.infosec.warning.abs.impl.NetAuthPolicyEvaluateWarning;
import com.infosec.warning.abs.impl.NetAuthResourceLoginWarning;
import com.infosec.warning.abs.impl.NetAuthResourceSyncErrorWarning;
import com.infosec.warning.abs.notice.impl.SimpleNetAuthWarningNotice;
import com.infosec.warning.scheduler.job.NetAuthCpuUtilizationWarning;
import com.infosec.warning.scheduler.job.NetAuthMemoryUtilizationWarning;
import com.infosec.warning.scheduler.job.NetAuthOnlineUserWarning;
import com.infosec.warning.scheduler.job.NetAuthWeakPasswordWarning;
import com.infosec.warning.service.IWarningRuleConfigService;
import com.netauth.utils.component.Db3CacheUtils;
@Component
public class NetAuthWarningUtil {
@Autowired
private Db3CacheUtils db3CacheUtils;
@Autowired
private WarningRedisKeyProperties warningRedisKeyProperties;
@Autowired
private IWarningRuleConfigService iWarningRuleConfigService;
@Autowired
private IUserExtensionService userExtensionService;
/**
* 同一用户登录失败事件触发
* @param loginname 用户登录名
*/
public void warningAndNoticeSameUserLoginErrorEvent(String loginname,String ip) {
String userName = "";
UserExtensionBean user = userExtensionService.findByLoginName(loginname);
if(user !=null) {
userName = user.getUsername()==null ?"" :user.getUsername();
}
NetAuthLoginErrorWarning warning = new NetAuthLoginErrorWarning(iWarningRuleConfigService.findOneById(1), warningRedisKeyProperties, db3CacheUtils,userName,ip);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.LOGINERRORNOTICE.getEvent());
warning.setLoginname(loginname);
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* 同一用户频繁登录触发事件方法
* @param loginname 用户登录名
*/
public void warningAndNoticeSameUserFrequentlyLoginErrorEvent(String loginname,String ip) {
String userName = "";
UserExtensionBean user = userExtensionService.findByLoginName(loginname);
if(user !=null) {
userName = user.getUsername()==null ?"" :user.getUsername();
}
NetAuthFrequentlyLoginWarning warning = new NetAuthFrequentlyLoginWarning(iWarningRuleConfigService.findOneById(1), warningRedisKeyProperties, db3CacheUtils,loginname,userName,ip);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.FREQUENTLYLOGINNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* 同一用户多次修改密码触发事件方法
* @param loginname 用户登录名
*/
public void warningAndNoticeModifyPasswordEvent(String loginname,String ip) {
String userName = "";
UserExtensionBean user = userExtensionService.findByLoginName(loginname);
if(user !=null) {
userName = user.getUsername()==null ?"" :user.getUsername();
}
NetAuthModifyPasswordWarning warning = new NetAuthModifyPasswordWarning(iWarningRuleConfigService.findOneById(1), warningRedisKeyProperties, db3CacheUtils,loginname,userName,ip);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.UPDATEPASSWORDNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* 用户登录资源系统触发事件方法
* @param loginname 用户登录名
* @param systemTag 资源编码
*/
public void warningAndNoticeResourceSystemLoginEvent(String loginname,String systemTag,String ip) {
String userName = "";
UserExtensionBean user = userExtensionService.findByLoginName(loginname);
if(user !=null) {
userName = user.getUsername()==null ?"" :user.getUsername();
}
NetAuthResourceLoginWarning warning = new NetAuthResourceLoginWarning(iWarningRuleConfigService.findOneById(1), warningRedisKeyProperties, db3CacheUtils,loginname,systemTag,userName,ip);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.RESOURCESYSTEMLOGINNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* 帐号同步/部门同步/岗位同步失败触发事件方法
* @param systemTag 资源编码
* @param syncType 同步类型 1:帐号同步 2:部门同步 3:岗位同步
* @param code 帐号/部门/岗位编码
*/
public void warningAndNoticeResourceSyncErrorEvent(String systemTag,int syncType,String code) {
NetAuthResourceSyncErrorWarning warning = new NetAuthResourceSyncErrorWarning(iWarningRuleConfigService.findOneById(1), warningRedisKeyProperties, db3CacheUtils,systemTag,syncType,code);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.RESOURCESYNCERRORNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* 弱密码定时任务监控方法
*/
public void warningAndNoticeWeakPasswordWithSchedulerEvent() {
NetAuthWeakPasswordWarning warning = new NetAuthWeakPasswordWarning(iWarningRuleConfigService);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.WEAKPASSWORDNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* 在线用户定时任务监控方法
*/
public void warningAndNoticeOnlineUserWithSchedulerEvent() {
NetAuthOnlineUserWarning warning = new NetAuthOnlineUserWarning(iWarningRuleConfigService);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.ONLINEUSERNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* cpu使用率监控
*/
public void warningAndCpuWithSchedulerEvent() {
NetAuthCpuUtilizationWarning warning = new NetAuthCpuUtilizationWarning(iWarningRuleConfigService);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.CPUNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* 内存使用率监控
*/
public void warningAndMemoryWithSchedulerEvent() {
NetAuthMemoryUtilizationWarning warning = new NetAuthMemoryUtilizationWarning(iWarningRuleConfigService);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.MEMORYNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
/**
* 策略评估触发事件方法
*/
public void warningAndNoticePolicyEvaluateWithSchedulerEvent(String factorName,String disposalStrategy,String ip,String details) {
NetAuthPolicyEvaluateWarning warning = new NetAuthPolicyEvaluateWarning(iWarningRuleConfigService.findOneById(1), warningRedisKeyProperties, db3CacheUtils
,factorName,disposalStrategy,ip,details);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(NetAuthWarningNoticeEventType.UEBAPOLICYEVALUATENOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
}
package com.infosec.warning.scheduler.job;
import org.quartz.JobBuilder;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SchedulerFactory;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.TriggerKey;
import org.quartz.impl.StdSchedulerFactory;
import com.infosec.warning.scheduler.AbstractNetAuthSchedulerWarning;
import com.infosec.warning.scheduler.job.detail.MemoryUtilizationWarningJobDetail;
import com.infosec.warning.service.IWarningRuleConfigService;
/**
*
* <p>
* 内存使用率预警调度
* </p>
*
* <p>
* 版权所有:北京信安世纪科技股份有限公司 (c) 2022
* </p>
*
* @author jlcui
* @date: 26-八月-22 上午 11:42
*
*/
public class NetAuthMemoryUtilizationWarning extends AbstractNetAuthSchedulerWarning {
public NetAuthMemoryUtilizationWarning(IWarningRuleConfigService iWarningRuleConfigService) {
super(iWarningRuleConfigService);
}
@Override
public void startWarning() {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
try {
Scheduler scheduler = schedulerFactory.getScheduler();
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("warning", this);
JobDetail cpuJobDetail = JobBuilder.newJob(MemoryUtilizationWarningJobDetail.class).usingJobData(jobDataMap)
.withIdentity("weakMemoryJob", "weakMemoryGroup").build();
Trigger oldtrigger = scheduler
.getTrigger(TriggerKey.triggerKey("weakMemoryTrigger", "weakMemoryTriggerGroup"));
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("weakMemoryTrigger", "weakMemoryTriggerGroup")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule()
.withIntervalInMinutes(iWarningRuleConfigService.findOneById(1).getMemoryUtilizationTime())
.repeatForever())
.build();
if (null != oldtrigger) {
scheduler.rescheduleJob(TriggerKey.triggerKey("weakMemoryTrigger", "weakMemoryTriggerGroup"), trigger);
} else {
scheduler.scheduleJob(cpuJobDetail, trigger);
// 启动定时任务
scheduler.start();
}
;
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
package com.infosec.warning.scheduler;
import com.infosec.warning.abs.NetAuthWarning;
import com.infosec.warning.abs.NetAuthWarningNotice;
import com.infosec.warning.entity.WarningRuleConfig;
import com.infosec.warning.service.IWarningRuleConfigService;
/**
* 定时检测类预警通知的抽象类
* @author 丁影
*
*/
public abstract class AbstractNetAuthSchedulerWarning implements NetAuthWarning{
protected NetAuthWarningNotice netAuthNotice;
protected IWarningRuleConfigService iWarningRuleConfigService;
public AbstractNetAuthSchedulerWarning(IWarningRuleConfigService iWarningRuleConfigService) {
super();
this.iWarningRuleConfigService = iWarningRuleConfigService;
}
/**
* 通过子类实现具体的预警逻辑
*/
public abstract void startWarning();
/**
* 是否开启预警通知
* @return
*/
public boolean isOpenWarning() {
WarningRuleConfig warningRuleConfig = iWarningRuleConfigService.findOneById(1);
return warningRuleConfig.getEnabled();
};
@Override
public void warning() {
if(isOpenWarning()) {
startWarning();
}
}
public void setNetAuthNotice(NetAuthWarningNotice netAuthNotice) {
this.netAuthNotice = netAuthNotice;
}
public NetAuthWarningNotice getNetAuthNotice() {
return netAuthNotice;
}
public IWarningRuleConfigService getiWarningRuleConfigService() {
return iWarningRuleConfigService;
}
}
package com.infosec.warning.abs;
/**
*
* @author 丁影
*
*/
public interface NetAuthWarning {
/**
* 预警方法
*/
void warning();
}
package com.infosec.warning.abs;
/**
* 事件类型
* @author dingying
* @date 创建时间:2020年6月2日 下午5:38:23
*/
public enum NetAuthWarningNoticeEventType {
/**
* 登录失败预警通知
*/
LOGINERRORNOTICE("loginErrorNotice","登录失败预警通知"),
/**
* 频繁登录预警通知
*/
FREQUENTLYLOGINNOTICE("frequentlyLoginNotice","频繁登录预警通知"),
/**
* 修改密码预警通知
*/
UPDATEPASSWORDNOTICE("updatePasswordNotice","修改密码预警通知"),
/**
* 弱密码预警通知
*/
WEAKPASSWORDNOTICE("weakPasswordNotice","弱密码预警通知"),
/**
* 业务系统登录预警通知
*/
RESOURCESYSTEMLOGINNOTICE("resourceSystemLoginNotice","业务系统登录预警通知"),
/**
* 在线用户预警通知
*/
ONLINEUSERNOTICE("onlineUserNotice","在线用户预警通知"),
/**
* CPU使用率
*/
CPUNOTICE("cpuUtilizationNotice","cpu使用率"),
/**
* 内存使用率
*/
MEMORYNOTICE("memoryUtilizationNotice","内存使用率"),
/**
* 业务系统帐号同步失败预警通知
*/
RESOURCESYNCERRORNOTICE("resourceSyncErrorNotice","业务系统帐号同步失败预警通知"),
/**
* 业务系统同步接口预警通知
*/
SYNCINTERFACECHECKERRORNOTICE("syncInterfaceCheckErrorNotice","业务系统同步接口预警通知"),
/**
* 策略评估预警通知
*/
UEBAPOLICYEVALUATENOTICE("policyEvaluateNotice","策略评估预警通知");
String event;
String name;
NetAuthWarningNoticeEventType(String event,String name) {
this.event = event;
this.name = name;
}
public String getEvent() {
return event;
}
public String getName() {
return name;
}
}