`

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




分享到:
评论
1 楼 endual 2017-03-23  
赞一个  

相关推荐

    Shiro反序列化漏洞,Shiro版本升级资源

    shiro使用的版本是1.2.4,存在反序列化漏洞,我们采取的办法是手动升级到了1.2.6版本,但苦于无法验证是否...那么在我的项目中,选择的是升级版本到1.2.6。大家有同样问题的可以选择试一下希望大家也能像我一样解决;

    spring+springmvc+shiro+quartz

    总结来说,"spring+springmvc+shiro+quartz"组合代表了一个完整的Java Web应用解决方案,涵盖了从基础架构到安全控制再到任务调度的各个方面。在实际开发中,理解并熟练运用这些框架能显著提高开发效率,同时保证...

    shiro所有版本jar

    Apache Shiro是一个强大且易用的Java安全框架,它提供了认证、授权、加密和会话管理功能,可以...通过这个压缩包,开发者可以获取到不同版本的Shiro,根据项目需求选择合适版本进行集成,以实现高效且安全的权限控制。

    shiro-jar.zip

    shiro-crypto-hash-1.7.1.jar,shiro-ehcache-1.7.1.jar,shiro-event-1.7.1.jar,shiro-guice-1.7.1.jar,shiro-hazelcast-1.7.1.jar,shiro-lang-1.7.1.jar,shiro-quartz-1.7.1.jar,shiro-spring-1.7.1.jar,shiro-web-...

    shiro-core-1.7.1 jar

    shiro shiro-core-1.7.1 jar shiro漏洞

    shiro1.7.1.zip

    标题"shiro1.7.1.zip"表明这是Apache Shiro的一个版本更新,从1.3.2升级到1.7.1。描述中提到,这个压缩包包含了Shiro 1.7.1的相关依赖,并且要求使用JDK 1.8或更高版本来运行。 Shiro 1.7.1的更新可能包括性能优化...

    shiro-quartz-1.2.2.jar

    shiro-quartz-1.2.2.jar

    SpringBoot + Apache Shiro1.9.1 最新版本详细教程,基于RBAC角色访问、安全管理框架、用户角色权限

    springboot、shiro、mybatis、mybatis plus、mysql、thymeleaf、 3、实现功能:登陆认证、密码加密、权限授权等 4、优点:快速上手、全面支持验证、授权、加密和会话、灵活自定义设计、支持web环境、可以无缝集成...

    shiro最简单整合版本

    以上就是 Apache Shiro 的最简单整合版本,它涵盖了基本的身份认证、授权流程和配置。然而,实际项目中可能需要考虑更多细节,如会话管理、缓存策略、Web 应用的集成等。Shiro 提供了丰富的 API 和扩展点,可以根据...

    shiro1.6版本

    Apache Shiro 是一个强大且易用的Java安全框架,提供了身份验证、授权、加密和会话管理功能,简化了企业级应用的安全实现。...如果你的项目使用了Shiro,强烈建议升级到这个版本,以充分利用其最新的安全特性。

    Apache Shiro教程

    通过这个Apache Shiro教程,你可以学习到如何构建安全的Java应用,了解Shiro的配置和用法,以及如何在实际项目中实施身份验证、授权、会话管理和加密策略。无论你是初学者还是经验丰富的开发者,Shiro都是一个值得...

    Apache shiro 1.13.0源码

    Shiro 1.13.0 是其一个重要的版本,包含了多项更新和改进。在这个版本中,开发者可以深入理解其内部机制,学习如何构建安全的应用程序。 首先,Shiro 的核心组件包括身份认证(Authentication)、授权...

    shiro-core 低版本漏洞检测

    shiro-core 低版本漏洞检测工具

    springboot+mybatis+shiro+generator+quartz(基础框架)

    "springboot+mybatis+shiro+generator+quartz"的组合提供了一个高效、便捷的开发环境,能够帮助开发者快速搭建应用并进行安全控制、数据库操作以及任务调度。下面我们将详细探讨这些组件的关键知识点。 1. **Spring...

    shiro+SpringMVC+Spring+mybatis+maven+mybatis 自动刷新+ Quartz scheduler 定时器

    "shiro+SpringMVC+Spring+mybatis+maven+mybatis 自动刷新+Quartz scheduler 定时器"是一个常见的技术栈组合,每个组件都有其特定的功能和作用。 1. **Shiro**:Apache Shiro 是一个强大且易用的Java安全框架,提供...

    Apache_Shiro_使用手册(一)Shiro架构介绍

    ### Apache Shiro 使用手册(一)Shiro架构介绍 #### 一、Shiro简介 Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较...

    高版本AES-GCM模式加密的Shiro漏洞利用1

    高版本AES-GCM模式加密的Shiro漏洞利用1 高版本AES-GCM模式加密的Shiro漏洞利用1是指在Shiro框架中,使用高版本AES-GCM模式加密时出现的漏洞利用问题。Shiro框架在高版本中更换了加密算法,从AES-CBC换成了AES-GCM...

    使用quartz需要的jar包

    - 避免版本冲突:确保所有依赖的jar包版本兼容,避免因不同版本的库导致的运行时问题。 - 调试与监控:利用日志系统跟踪Quartz的运行状态,可以使用Quartz提供的监控工具(如` quartz-admin.jar`)进行远程监控和...

    shiro jar包

    5. **Web Integration(Web 整合)**:Shiro 提供了一系列的 Filter,如 `FormAuthenticationFilter` 和 `AuthorizationFilter`,可以方便地集成到 web 应用中,实现用户登录、权限校验等功能。 6. **Remember Me...

    spring-mybatis-redis-shiro框架-最原始版本可直接拿来用的

    Shiro可以非常容易地开发出足够安全的应用,同时Shiro还能极其容易地整合到已有的应用中去。 在这个压缩包"springboot-shiro-master"中,我们可以推测其包含了以下内容: 1. **Spring Boot配置**:可能包含`...

Global site tag (gtag.js) - Google Analytics