shiro 정시 모니터 가 적용 되 지 않 는 문 제 를 해결 합 니 다.

문제.
redis 이상 던 지기:

redis.clients.jedis.ScanResult.getStringCursor()Ljava/lang/String;
Method threw 'java.lang.NoSuchMethodError' exception.
설명 하 다.
spring-boot 버 전

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
shiro-redis 버 전

 <dependency>
   <groupId>org.crazycake</groupId>
   <artifactId>shiro-redis</artifactId>
   <version>3.2.3</version>
</dependency>
제 디 스 버 전
image-20210721141755093
shiro 설정 정시 검색 session 실효
shiro 설정 session 실효 시간,shiro-quartz 참조 없 음,기본 값 사용

ExecutorServiceSessionValidationScheduler
shiro 설정

  @Bean
    public SessionManager sessionManager(SimpleCookie simpleCookie, SessionDAO sessionDAO) {
        logger.debug("      :  sessionManager  ");
        SkySessionManager skySessionManager = new SkySessionManager();
        skySessionManager.setSessionDAO(sessionDAO);
        skySessionManager.setSessionIdCookie(simpleCookie);
        //   cookie
        skySessionManager.setSessionIdCookieEnabled(true);
        // session     session
        skySessionManager.setDeleteInvalidSessions(true);
        //          session
        skySessionManager.setSessionValidationInterval(10000);
        //    schedule
        skySessionManager.setSessionValidationSchedulerEnabled(true);
​
        skySessionManager.setSessionListeners(Collections.singletonList(new SkySessionListener()));
        logger.debug("      :  sessionManager  ");
        return skySessionManager;
    }
shiro schedule 생 성 논리




문제점
기본 scheduler 를 만 든 후 run 방법 을 실행 합 니 다.

계속 추적 코드

이곳 에 이상 이 있 는 것 을 발 견 했 지만 이상 이 포착 되 지 않 아 스 레 드 가 중단 되 었 습 니 다.
인터넷 바 이 두 의 이상 설 은 제 디 스 버 전이 일치 하지 않 아 생 긴 것 이다.
해결 방안
shiro-redis pom 파일 jedis 의 버 전 번 호 를 봅 니 다.
image-20210721142036883
제 디 스 버 전 번호 가 2.9.0 인 걸 발 견 했 어 요.
jedis 2.9.0 을 프로젝트 에 통합:

<dependency>
  <groupId>redis.clients</groupId>
  <artifactId>jedis</artifactId>
  <version>2.9.0</version>
</dependency>
이로써 문 제 는 해결 된다.

 @Override
public void onExpiration(Session session)
onExpiration 방법 이 호출 되 지 않 는 문제 입 니 다.이 방법 은 위의 정시 작업 알림 을 통 해 실 행 됩 니 다.

redis 와 ehcache 자체 에 만 료 시간 이 설정 되 어 있 기 때문에 만 료 후 session 은 redis 후자 ehcache 에서 삭 제 됩 니 다.따라서 onExpiration 이 만 료 된 후에 이 방법 은 영원히 호출 되 지 않 습 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기