Shiro 의 세 션 관리

개요 및 설정 사용
개술
  Shiro 는 보안 프레임 워 크 계 에서 유일한 것 을 제공 합 니 다. 완전한 기업 급 Session 솔 루 션 은 임의의 응용 프로그램 에 session 지원 을 제공 할 수 있 습 니 다. 웹 과 비 웹 응용 프로그램 을 포함 하고 웹 용기 에 프로그램 을 배치 하거나 EJB 용 기 를 사용 하지 않 아 도 됩 니 다.
기본 사용
  현재 실행 중인 Subject 와 대화 하여 Session 을 가 져 올 수 있 습 니 다.
 Subject currentUser = SecurityUtils.getSubject();  
 Session session = currentUser.getSession();
 session.setAttribute("someKey", someValue);

Session Manager
  Session Manager 는 Session 을 관리 하 는 구성 요소 입 니 다. 생 성, 삭제, inactivity (실효) 및 검증 등 을 포함 합 니 다.Session Manager 도 Security Manager 가 유지 하 는 최고의 구성 요소 입 니 다.
  shiro 는 기본 적 인 Session Manager 구현 을 제공 합 니 다. 일반적으로 이것 을 사용자 정의 할 필요 가 없습니다.
Sessioin 만 료 시간 설정
  Shiro 의 Session Manager 구현 기본 값 은 30 분 세 션 시간 초과 입 니 다.
  모든 세 션 에 기본 시간 초과 시간 을 정의 하기 위해 Session Manager 가 기본적으로 구현 하 는 globalSession Timeout 속성 을 설정 할 수 있 습 니 다.예컨대
[main]
# 3,600,000 milliseconds = 1 hour
securityManager.sessionManager.globalSessionTimeout = 3600000

사건 감청
      Session Listener 인터페이스 (또는 사용 하기 쉬 운 Session Listener Adapter) 를 실현 하고 해당 세 션 작업 과 반응 할 수 있 습 니 다.설정 예시:
[main]
aSessionListener = com.foo.my.SessionListener
anotherSessionListener = com.foo.my.OtherSessionListener
securityManager.sessionManager.sessionListeners = $aSessionListener, $anotherSessionListener

 
SessionDAO
개술
  세 션 이 생 성 되 거나 업 데 이 트 될 때마다 데 이 터 는 나중에 프로그램 에 접근 할 수 있 도록 저장 위치 로 오래 지속 되 어야 합 니 다. 이 기능 을 실현 하 는 구성 요 소 는 Session DAO 입 니 다.
  너 는 이 인 터 페 이 스 를 실현 해서 네가 원 하 는 모든 데이터 저장 소 와 통신 할 수 있다.이것 은 세 션 데 이 터 를 메모리, 파일 시스템, 관계 데이터베이스 또는 NoSQL 의 데이터 저장 또는 필요 한 위치 에 저장 할 수 있 음 을 의미 합 니 다.
기본 설정  SessionDAO 는 기본 SessionManager 인 스 턴 스 에 속성 으로 설정 되 어 있 습 니 다.
[main]
sessionDAO = com.foo.my.SessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO

 이런 SessionDAO 는 주로 로 컬 응용 프로그램 에서 작용 한다.
EHcache 기반 SessionDAO 의 기본 설정 은 다음 과 같 습 니 다.
[main]
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO
cacheManager = org.apache.shiro.cache.ehcache.EhCacheManager
securityManager.cacheManager = $cacheManager

nShiro 는 기본 EHcache 설정 xml 를 제공 합 니 다. EHcache. xml 을 설정 하려 면 다음 과 같은 몇 가 지 를 주의해 야 합 니 다.
1: overflow ToDisk = "true" - 프로 세 스 메모리 가 넘 칠 때 세 션 을 잃 어 버 리 지 않 고 디스크 에 정렬 할 수 있 도록 합 니 다.
2: eternal = "true" - 슬 로 우 메모리 (Session 인 스 턴 스) 가 만 료 되 지 않 거나 캐 시 에서 자동 으로 지 워 지지 않도록 합 니 다.Shiro 가 계획 과정 을 바탕 으로 자신의 검증 을 완 성 했 기 때문에 필요 하 다.이 항목 을 끄 면 캐 시 는 Shiro 가 모 르 는 상태 에서 이 Sessions 를 청소 합 니 다. 이것 은 문 제 를 일 으 킬 수 있 습 니 다.
3: 기본 값 이 아 닌 다른 이름 을 사용 하려 면 EnterpriseCacheSessionDAO 에 이름 을 설정 할 수 있 습 니 다. 예 를 들 어 sessionDAO. active SessionsCacheName = my name
  이 이름과 일치 하 는 이름 이 ehcahe. xml 에 있 는 지 확인 하기 만 하면
 
웹 애플 리 케 이 션 의 세 션
       웹 응용 프로그램 에 서 는 기본적으로 용기 의 세 션 을 사용 합 니 다. 웹 프로그램 을 기반 으로 세 션 저장 소 나 세 션 클 러 스 터 를 사용자 정의 하려 면 로 컬 웹 세 션 관리 자 를 먼저 설정 해 야 합 니 다.예 를 들 면:
[main]
sessionManager=org.apache.shiro.web.session.mgt.DefaultWebSessionManager
securityManager.sessionManager = $sessionManager
# Configure a SessionDAO and then set it:
securityManager.sessionManager.sessionDAO = $sessionDAO

      웹 응용 프로그램 에서 모든 요청 을 바탕 으로 세 션 생 성 을 사용 하거나 사용 하지 않 으 려 면 설정 에 있 는 [urls] 에서 해당 url 에 noSession Creation 필 터 를 설정 할 수 있 습 니 다. 다음 과 같 습 니 다.
[urls]
/rest/** = noSessionCreation, authcBasic

 사용자 정의 SessionDAO
       n. 일부 장면 에서 저 희 는 사용자 의 Session 정 보 를 관리 해 야 합 니 다. 예 를 들 어 Session 정 보 를 데이터베이스 에 넣 으 면 조작 로 그 를 기록 하거나 온라인 인원 을 통계 할 수 있 습 니 다.
       사용자 정의 SessionDAO 도 매우 간단 합 니 다. 보통 AbstractSessionDAO 를 계승 하여 Session 데이터 에 대한 CRUD 를 실현 하면 됩 니 다. 간단 한 예 는 다음 과 같 습 니 다.
public class MySessionDAO extends AbstractSessionDAO{
private Map<Serializable,Session> map = new HashMap<Serializable,Session>();
  public void update(Session session) throws UnknownSessionException {
  System.out.println("now update session");
  map.put(session.getId(),session);
  }
  public void delete(Session session) {
  System.out.println("now delete session"); 
  map.remove(session.getId());
  }
  public Collection<Session> getActiveSessions() {
  System.out.println("now getActiveSessions session");
  return map.values();
  }
 
  protected Serializable doCreate(Session session) {
  System.out.println("now doCreate session");
  Serializable sessionId = generateSessionId(session);
      assignSessionId(session, sessionId);
      map.put(sessionId, session);
   
     return sessionId;
  }
  protected Session doReadSession(Serializable sessionId) {
  System.out.println("now doReadSession session");
  return map.get(sessionId);
  }
}

기본 설정 예제:
sessionDAO = cn.javass.hello.MySessionDAO
securityManager.sessionManager.sessionDAO = $sessionDAO

 글방 오리지널 http://sishuok.com/forum/blogPost/list/0/7458.html

좋은 웹페이지 즐겨찾기