shiro升级quartz到2.1.6版本

在做老司机的项目时,spring使用的是4.2.1版本,shiro用的是1.2.3,但是,spring扩展中 spring-context使用的quartz2的版本,
而shiro到现在还是使用的quartz1.6.1版本,所以,把spring降下来是不可能了,因为很多扩展都给予spring4,所以想把shiro升上去
是最好的解决方法,综合了网上升级spring的方法,使用以下方式升级shiro-quartz,实际上就是替换了shiro-quartz这个包,
实际上只用重写两个类就可以了,
具体实现类如下


package org.apache.shiro.session.mgt.quartz;

/**
* Created by koko on 2016/7/20.
*/
import org.apache.shiro.session.mgt.ValidatingSessionManager;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* 基于Quartz 2.* 版本的实现
*
*/
public class QuartzSessionValidationJob2 implements Job {

/**
* Key used to store the session manager in the job data map for this job.
*/
public static final String SESSION_MANAGER_KEY = "sessionManager";

/*--------------------------------------------
| I N S T A N C E V A R I A B L E S |
============================================*/
private static final Logger log = LoggerFactory.getLogger(QuartzSessionValidationJob2.class);

/*--------------------------------------------
| C O N S T R U C T O R S |
============================================*/

/*--------------------------------------------
| A C C E S S O R S / M O D I F I E R S |
============================================*/

/*--------------------------------------------
| M E T H O D S |
============================================*/

/**
* Called when the job is executed by quartz. This method delegates to the <tt>validateSessions()</tt> method on the
* associated session manager.
*
* @param context
* the Quartz job execution context for this execution.
*/
public void execute(JobExecutionContext context) throws JobExecutionException {

JobDataMap jobDataMap = context.getMergedJobDataMap();
ValidatingSessionManager sessionManager = (ValidatingSessionManager) jobDataMap.get(SESSION_MANAGER_KEY);

if (log.isDebugEnabled()) {
log.debug("Executing session validation Quartz job...");
}

sessionManager.validateSessions();

if (log.isDebugEnabled()) {
log.debug("Session validation Quartz job complete.");
}
}

}




第二个类 spring注入的也是这个类

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;
}
}

}


最后在spring的配置文件中配置shiro的quartz配置


<bean id="sessionValidationScheduler"
class="org.apache.shiro.session.mgt.quartz.QuartzSessionValidationScheduler2">
<property name="sessionValidationInterval" value="1800000"/>
<property name="sessionManager" ref="sessionManager"/>
</bean>



大功告成,oh yeah
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值