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;
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;
public interface NetAuthWarning {
/**
* 预警方法
*/
void 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.WeakPasswordWarningJobDetail;
import com.infosec.warning.service.IWarningRuleConfigService;
public class NetAuthWeakPasswordWarning extends AbstractNetAuthSchedulerWarning{
public NetAuthWeakPasswordWarning(IWarningRuleConfigService iWarningRuleConfigService) {
super(iWarningRuleConfigService);
}
/**
*
* @Description 启动弱密码用户预警检测调度器 --补充备注
* @author wyh
* @date 2020年10月14日上午9:38:55
*/
@Override
public void startWarning() {
SchedulerFactory schedulerFactory = new StdSchedulerFactory();
try {
Scheduler scheduler = schedulerFactory.getScheduler();
JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("warning", this);
JobDetail weakPwdJobDetail = JobBuilder.newJob(WeakPasswordWarningJobDetail.class)
.usingJobData(jobDataMap)
.withIdentity("weakPwdJob", "weakPwdGroup")
.build();
Trigger oldtrigger = scheduler.getTrigger(TriggerKey.triggerKey("weakPwdTrigger", "weakPwdTriggerGroup"));
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("weakPwdTrigger", "weakPwdTriggerGroup")
.startNow()
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMinutes(iWarningRuleConfigService.findOneById(1).getWeakPasswordUserTime()).repeatForever())
.build();
if(null != oldtrigger) {
scheduler.rescheduleJob(TriggerKey.triggerKey("weakPwdTrigger", "weakPwdTriggerGroup"), trigger);
}else {
scheduler.scheduleJob(weakPwdJobDetail, trigger);
//启动定时任务
scheduler.start();
};
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
public void warningAndNoticeWeakPasswordWithSchedulerEvent() {
NetAuthWeakPasswordWarning warning = new NetAuthWeakPasswordWarning(iWarningRuleConfigService);
NetAuthWarningNotice netAuthWarningNotice=new SimpleNetAuthWarningNotice(iWarningNoticeModeConfigService.findOneById(1), NetAuthWarningNoticeEventType.WEAKPASSWORDNOTICE.getEvent());
warning.setNetAuthNotice(netAuthWarningNotice);
warning.warning();
}
package com.infosec.warning.scheduler.job.detail;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.quartz.SchedulerException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.infosec.user.service.user.IUserExtensionService;
import com.infosec.warning.abs.NetAuthWarningNoticeEventType;
import com.infosec.warning.entity.WarningNoticeEventLog;
import com.infosec.warning.entity.WarningRuleConfig;
import com.infosec.warning.scheduler.job.NetAuthWeakPasswordWarning;
import com.infosec.warning.service.IWarningNoticeEventLogService;
import com.netauth.utils.component.LocalSpringService;
/**
*
*
* <p>
* 弱密码用户检测预警记录执行job--补充备注
* </p>
*
* <p>
* 版权所有:神州融信信息技术有限公司(c) 2019
* </p>
* @date 2020年10月14日
* @author wyh
*
*/
public class WeakPasswordWarningJobDetail implements Job{
Logger logger = LoggerFactory.getLogger(WeakPasswordWarningJobDetail.class);
private IUserExtensionService userExtensionService = LocalSpringService.getSpringService(IUserExtensionService.class);
private NetAuthWeakPasswordWarning warning;
private IWarningNoticeEventLogService iWarningNoticeEventLogService = LocalSpringService.getSpringService(IWarningNoticeEventLogService.class);
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
warning = (NetAuthWeakPasswordWarning) context.getJobDetail().getJobDataMap().get("warning");
if(!warning.isOpenWarning()) {
try {
//如果关闭监控,则关闭当前任务
context.getScheduler().shutdown();
logger.debug("当前任务已关闭");
} catch (SchedulerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//执行弱密码检测任务
try {
long value = userExtensionService.findWeakPasswordUserCount();
WarningRuleConfig ruleConfig = warning.getiWarningRuleConfigService().findOneById(1);
Integer threshold = ruleConfig.getWeakPasswordUserThreshold();
WarningNoticeEventLog log = new WarningNoticeEventLog();
log.setCreateTime(new Date());
log.setEventType(NetAuthWarningNoticeEventType.WEAKPASSWORDNOTICE.getEvent());
log.setValue(Integer.valueOf(value+""));
log.setEventName(NetAuthWarningNoticeEventType.WEAKPASSWORDNOTICE.getName());
iWarningNoticeEventLogService.saveOrUpdate(log);
if(value>=threshold) {
warning.getNetAuthNotice().notice("预警通知:\n\r\t当前系统中存在弱密码用户已经超过安全预警设置的阈值,请尽快到系统进行处理。当前弱密码用户总数为:"+value, Integer.parseInt(value+""), null, null, null);
}
} catch (Exception e) {
e.printStackTrace();
logger.error("弱密码用户检测失败");
}
}
}