shiro升级quartz到2.1.6版本
2017-02-24 00:00
183 查看
在做老司机的项目时,spring使用的是4.2.1版本,shiro用的是1.2.3,但是,spring扩展中 spring-context使用的quartz2的版本,
而shiro到现在还是使用的quartz1.6.1版本,所以,把spring降下来是不可能了,因为很多扩展都给予spring4,所以想把shiro升上去
是最好的解决方法,综合了网上升级spring的方法,使用以下方式升级shiro-quartz,实际上就是替换了shiro-quartz这个包,
实际上只用重写两个类就可以了,
具体实现类如下
第二个类 spring注入的也是这个类
最后在spring的配置文件中配置shiro的quartz配置
大功告成,oh yeah
而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>
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-quartz</artifactId> <version>${shiro.version}</version> <exclusions> <exclusion> <groupId>org.opensymphony.quartz</groupId> <artifactId>quartz</artifactId> </exclusion> </exclusions> </dependency>
大功告成,oh yeah
相关文章推荐
- shiro升级quartz到2.1.6版本
- 解决shiro和quartz2 版本冲突问题
- 升级shiro对quartz 2的支持
- 用quartz做定时任务时和shiro中用到的quartz包版本不一致导致的冲突的解决方法
- 解决Shiro和Quartz2.X版本冲突问题
- JBoss 4.2.3GA 升级Quartz版本
- 升级shiro对quartz 2的支持
- 升级shiro对quartz 2的支持
- mysql升级到5.x版本
- 变更DirectX SDK版本-DirectX8升级DirectX9(一)
- Android自动检测版本及自动升级
- 版本升级
- 解决 jQuery 版本升级过程中出现 toLowerCase 错误 --更改 doctype
- Ubuntu12.04升级git版本
- [置顶] Android studio 升级,完美更新到官方最新稳定版本
- ios开发首次安装或者版本升级的引导页的判断
- ASP.NET2.0 分页控件 PagerPro.dll 升级版本(1.1.0.1253)
- jenkins版本升级
- android APP版本检测升级
- centos7通过yum升级内核到最新版本