原文: http://blog.csdn.net/huangsu2014/article/details/43409577
在集成spring4.1+shiro1.2.3+quartz2.2.1是出现此错误,原因是默认的shiro-quartz1.2.3中的实现是针对quartz1.6版本的实现(详细源码请查看QuartzSessionValidationScheduler),在quartz2.2.1中,SimppleTrigger为接口,所以无法实例化。下面的代码是针对2.2.1版本的实现:
- import org.apache.shiro.session.mgt.SessionValidationScheduler;
- import org.apache.shiro.session.mgt.ValidatingSessionManager;
- import org.apache.shiro.session.mgt.quartz.QuartzSessionValidationJob;
- 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;
- public class Quartz2SessionValidationScheduler implements
- SessionValidationScheduler {
- public static final long DEFAULT_SESSION_VALIDATION_INTERVAL = 3600000L;
- private static final String JOB_NAME = "SessionValidationJob";
- private static final Logger log = LoggerFactory
- .getLogger(Quartz2SessionValidationScheduler.class);
- private Scheduler scheduler;
- private boolean schedulerImplicitlyCreated = false;
- private boolean enabled = false;
- private ValidatingSessionManager sessionManager;
- private long sessionValidationInterval = 3600000L;
- public Quartz2SessionValidationScheduler() {
- }
- public Quartz2SessionValidationScheduler(
- 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, "DEFAULT")
- .withSchedule(
- SimpleScheduleBuilder.simpleSchedule()
- .withIntervalInMilliseconds(
- sessionValidationInterval)).build();
- JobDetail detail = JobBuilder
- .newJob(QuartzSessionValidationJob.class)
- .withIdentity(JOB_NAME, "DEFAULT").build();
- detail.getJobDataMap().put("sessionManager", 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;
- }
- }
- }