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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
자바 파일 압축 및 압축 풀기파일 의 간단 한 압축 과 압축 해 제 를 실현 하 였 다.주요 테스트 용 에는 급 하 게 쓸 수 있 는 부분 이 있 으 니 불편 한 점 이 있 으 면 아낌없이 가르쳐 주 십시오. 1. 중국어 문 제 를 해 결 했 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.