• 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>
    





  • 相关阅读:
    python 中文文档地址总结
    清除celery 任务队列
    celery work logging 问题
    mysql 数据库 存储数据类型
    python 补0的方法
    lunix 命令积累
    python3 import Crypto 失败的解决办法 (AES对称加密使用 模块)
    从excel 获取内容 模块:xlrd
    api h5 sdk 接入的说明
    Excel 打开两个单独的页面
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317732.html
Copyright © 2020-2023  润新知