내가 필터의 도움으로이 문제를 해결
공용 클래스 SessionReplicationFilter는 필터 {
를 구현
다음
}
관리자가 보인다는 공용 클래스 SessionReplicationManager {
private Map<String, HttpSession> map = new ConcurrentHashMap<String, HttpSession>();
public boolean checkExistingSession(String user, HttpSession session) {
if (map.keySet().contains(user)) {
if (!session.getId().equals(map.get(user).getId())) {
System.out.println("User already logged in ");
HttpSession oldSession = map.get(user);
// copies all attributes from the old session to the new session (replicate the session)
Enumeration<String> enumeration = oldSession.getAttributeNames();
while (enumeration.hasMoreElements()) {
String name = enumeration.nextElement();
System.out.println("Chaning attribut " + name);
session.setAttribute(name, oldSession.getAttribute(name));
}
// invalidates the old user session (this keeps one session per user)
oldSession.invalidate();
map.put(user, session);
return true;
}
} else {
System.out.println("Putting "+user+" into session cache");
map.put(user, session);
return false;
}
return false;
}
}
그것은 코디와 아주 잘 작동
이 주석 ViewScoped 콩
하는 경우를 @ApplicationScoped 첫 번째 (AJAX) 요청마다 세션이 만료 된 예외가 발생하여 복원 세션 버튼을 사용하여 쉽게 처리 할 수있는 예외가 발생합니다.
viewscoped beans의 사소한 문제는 새 뷰 ID를 얻는 것입니다. 원점으로 다시 변경하면 모든 것이 잘 작동합니다.
것들 내가 추가해야합니다
- 자동 로그 아웃 (아약스 폴링, WebSocket을 ...)
- 모든 viewscoped-ID가이 댓글에 누락
를 저장하는 레지스트리의 일부 종류 :
감사
왜하지 이미 로그인 한 사용자의 로그인 페이지를 숨기고 * "이미 로그인했습니다. 로그 아웃을 원하시는 경우 로그 아웃하십시오. 다른 사용자로서의 ogin "* 또는 그와 같은 분별있는 것. – BalusC
그게 그렇게 간단하지 않습니다. 사용자는 로그인을 신경 쓰지 않고 두 개의 다른 스테이션에서 작업하기를 원하기 때문입니다. 그는 그냥 같은 출력과 응용 프로그램의 동일한 상태를보고 싶어 – urbiwanus
그럼 왜 첫 번째 세션을 무효화해야합니까? – BalusC