1. 程式人生 > >解決shiro和quartz2 版本衝突問題

解決shiro和quartz2 版本衝突問題

package org.apache.shiro.session.mgt.quartz;/*** Created by koko on 2016/7/20.*/import org.apache.shiro.session.mgt.DefaultSessionManager;import org.apache.shiro.session.mgt.SessionValidationScheduler;import org.apache.shiro.session.mgt.ValidatingSessionManager;import org.quartz.JobBuilder;import org.quartz.JobDetail;import org.quartz.Scheduler;import org.quartz.SchedulerException;import org.quartz.SimpleScheduleBuilder;import org.quartz.SimpleTrigger;import org.quartz.TriggerBuilder;import org.quartz.TriggerKey;import org.quartz.impl.StdSchedulerFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/*** 基於Quartz 2.* 版本的實現*/public class QuartzSessionValidationScheduler2 implements SessionValidationScheduler {    public static final long DEFAULT_SESSION_VALIDATION_INTERVAL = DefaultSessionManager.DEFAULT_SESSION_VALIDATION_INTERVAL;    private static final String JOB_NAME = "SessionValidationJob";    private static final Logger log = LoggerFactory.getLogger(QuartzSessionValidationScheduler2.class);    private static final String SESSION_MANAGER_KEY = QuartzSessionValidationJob2.SESSION_MANAGER_KEY;    private Scheduler scheduler;    private boolean schedulerImplicitlyCreated = false;    private boolean enabled = false;    private ValidatingSessionManager sessionManager;    private long sessionValidationInterval = DEFAULT_SESSION_VALIDATION_INTERVAL;    public QuartzSessionValidationScheduler2() {    }    public QuartzSessionValidationScheduler2(ValidatingSessionManager sessionManager) {        this.sessionManager = sessionManager;    }    protected Scheduler getScheduler() throws SchedulerException {        if (this.scheduler == null) {            this.scheduler = StdSchedulerFactory.getDefaultScheduler();            this.schedulerImplicitlyCreated = true;        }        return this.scheduler;    }    public void setScheduler(Scheduler scheduler) {        this.scheduler = scheduler;    }    public void setSessionManager(ValidatingSessionManager sessionManager) {        this.sessionManager = sessionManager;    }    public boolean isEnabled() {        return this.enabled;    }    public void setSessionValidationInterval(long sessionValidationInterval) {        this.sessionValidationInterval = sessionValidationInterval;    }    public void enableSessionValidation() {        if (log.isDebugEnabled()) {            log.debug("Scheduling session validation job using Quartz with session validation interval of ["                    + this.sessionValidationInterval + "]ms...");        }        try {            SimpleTrigger trigger = TriggerBuilder.newTrigger().startNow().withIdentity(JOB_NAME, Scheduler.DEFAULT_GROUP)                    .withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInMilliseconds(sessionValidationInterval))                    .build();//<span style="color:#ff0000;">Quartz 2中的實現</span>            JobDetail detail = JobBuilder.newJob(QuartzSessionValidationJob2.class)                    .withIdentity(JOB_NAME, Scheduler.DEFAULT_GROUP).build();            detail.getJobDataMap().put(SESSION_MANAGER_KEY, this.sessionManager);            Scheduler scheduler = getScheduler();            scheduler.scheduleJob(detail, trigger);            if (this.schedulerImplicitlyCreated) {                scheduler.start();                if (log.isDebugEnabled()) {                    log.debug("Successfully started implicitly created Quartz Scheduler instance.");                }            }            this.enabled = true;            if (log.isDebugEnabled())                log.debug("Session validation job successfully scheduled with Quartz.");        } catch (SchedulerException e) {            if (log.isErrorEnabled())                log.error("Error starting the Quartz session validation job.  Session validation may not occur.", e);        }    }    public void disableSessionValidation() {        if (log.isDebugEnabled()) {            log.debug("Stopping Quartz session validation job...");        }        Scheduler scheduler;        try {            scheduler = getScheduler();            if (scheduler == null) {                if (log.isWarnEnabled()) {                    log.warn("getScheduler() method returned a null Quartz scheduler, which is unexpected.  Please check your configuration and/or implementation.  Returning quietly since there is no validation job to remove (scheduler does not exist).");                }                return;            }        } catch (SchedulerException e) {            if (log.isWarnEnabled()) {                log.warn("Unable to acquire Quartz Scheduler.  Ignoring and returning (already stopped?)", e);            }            return;        }        try {            scheduler.unscheduleJob(new TriggerKey("SessionValidationJob", "DEFAULT"));            if (log.isDebugEnabled())                log.debug("Quartz session validation job stopped successfully.");        } catch (SchedulerException e) {            if (log.isDebugEnabled()) {                log.debug("Could not cleanly remove SessionValidationJob from Quartz scheduler.  Ignoring and stopping.", e);            }        }        this.enabled = false;        if (this.schedulerImplicitlyCreated)            try {                scheduler.shutdown();            } catch (SchedulerException e) {                if (log.isWarnEnabled())                    log.warn("Unable to cleanly shutdown implicitly created Quartz Scheduler instance.", e);            } finally {                setScheduler(null);                this.schedulerImplicitlyCreated = false;            }    }}