2011-10-05 2 views
0

Tomcat 서버를 사용하고 있습니다. 응용 프로그램이 여러 사용자가 액세스해야하는 경우. 모든 사용자 세부 정보는 세션에만 저장됩니다. 일부 상황에서는 모든 사용자의 세부 정보를 얻어야합니다. 해당 세션에서 반복적으로 모든 사용자 세부 정보를 가져올 수 있습니다.세션에서 모든 사용자 이름을 반복하고 가져 오는 방법

답변

4

그냥 응용 프로그램 범위에있는 모든 로그인을 수집하고 저장하십시오. 가장 쉬운 방법은 로그인 한 사용자를 나타내는 User 개체가 HttpSessionBindingListener을 구현하게하는 것입니다. 응용 범위 (ServletContext 속성)에 Set<User>을 준비하기 만하면됩니다. 다음 valueBound()가 호출됩니다

User user = userService.find(username, password); 

if (user != null) { 
    request.getSession().setAttribute("user", user); 
    // ... 
} 

을 다음과 같이 사용자가 로그인 할 때마다

public class User implements HttpSessionBindingListener { 

    @Override 
    public void valueBound(HttpSessionBindingEvent event) { 
     Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins"); 
     logins.add(this); 
    } 

    @Override 
    public void valueUnbound(HttpSessionBindingEvent event) { 
     Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins"); 
     logins.remove(this); 
    } 

    // Don't forget to override equals() and hashCode() as well. 
} 

이 방법. 속성을 제거하거나 세션을 무효화하거나 세션을 만료 시키면 사용자를 로그 아웃 할 때마다 valueUnbound()이 호출됩니다.

ServletContext 속성은 물론 모든 서블릿과 JSP에서만 사용할 수 있습니다.

관련 문제