2016-07-15 3 views
1

に記録されます。は、どのように私は、すべてのユーザーのリストを持つことができ、私は<code>spring-mvc</code>を使用して、私のWebアプリにログインし、それぞれの使用は、私は彼の<strong>ID</strong>、名前といくつかの他の情報を含むオブジェクトであるセッション変数<code>user</code>を作成する私のWebアプリケーション

session.setAttribute("user", user); 

私の欲しいのは、自分のプログラムにログインしているすべてのユーザーのリストです。

アカウントごとにアクセスする必要があるため、このリストで同時にログインを確認する必要があります。

PS

:私はちょうどMVC InterceptorpreHandle()

答えて

0

1で動作するようにしたいので、spring-securityを使用するように私に教えていないが)春に自動ワイヤServletContextオブジェクトへのコードの下に使用してMVC

@Autowired 
ServletContext context; 

2 )コンテキストで設定されたすべてのログインしているユーザーを収集する必要があります。

... 
    public void login(User user) { 
     logins.add(user); 
    } 
...  
    public void logout(User user) { 
     logins.remove(user); 
    } 

あなたはログインしているユーザーのセッションですでに

public void sessionDestroyed(HttpSessionEvent event) { 
    User user = (User) event.getSession().getAttribute("user"); 
    if (user != null) { 
     Set<User> logins = (Set<User>) event.getSession().getServletContext().getAttribute("logins"); 
     logins.remove(user); 
    } 
} 
+0

ログイン属性の作成を忘れましたが、それは簡単です。 –

+0

ありがとうございます、私はコピーしようとしているアイデアはアプリケーションコンテキスト - >セッション>ユーザーです。 – amitmah

+0

@amitmahあなたは 'ServletContext context'を使用しませんでしたか? – Youssef

0

あなたがのHttpSessionListenerとのServletContextListenerの実装を使用することができますが保存している場合。 HttpSessionListenerは、セッションが作成または破棄されるたびに呼び出されます。コンテキストが作成または破棄されたときにServletContextListenerが呼び出される場所。

EDIT: HttpSessionBindingListenerのは、そのインスタンスなど、あなたのケースのユーザーのように、セッションに格納することができるクラスで使用することができます。

このユーザーのインスタンスがHttpSession.setAttribute()によってセッション属性として設定されると、valueBound()が呼び出されます。 HttpSession.removeAttribute()またはセッションの無効化によって削除されるか、別のHttpSession.setAttribute()に置き換えられると、valueUnbound()が呼び出されます。

例:

public class User implements HttpSessionBindingListener { 

@Override 
public void valueBound(HttpSessionBindingEvent event) { 
    addLoginUser(event); 
} 

@Override 
public void valueUnbound(HttpSessionBindingEvent event) { 
    removeLoginUser(event); 
} 

private void removeLoginUser(HttpSessionBindingEvent event){ 
if (user != null) { 
      ServletContext context = event.getSession().getServletContext(); 
      Set<User> logins = context.getAttribute("loginUsers"); 
      logins.remove(this); 
    } 
} 
    private void addLoginUser(HttpSessionBindingEvent event){ 

    if (user != null) { 
     ServletContext context = event.getSession().getServletContext(); 
     Set<User> logins = context.getAttribute("loginUsers"); 
     logins.add(this); 
    } 
} 

}

//Use this listner for adding loginUsers when ServletContext is initialized. 
public class MyServletContextListener implements ServletContextListener{ 
    public void contextInitialized(ServletContextEvent event){ 
     Set<User> logins = new HashSet<User>(); 

     //add Initial login to ServletContext 
     event.getServletContext().setAttribute("loginUsers", logins); 
    } 

public void contextDestroyed(ServletContextEvent event){} 

} 

は、web.xmlファイルに以下の設定を追加します。

<listener> 
    <listener-class> 
     package.name.MySessionAttributeListener 
    </listener-class> 
</listener> 

<listener> 
    <listener-class> 
     package.name.MyServletContextListener 
    </listener-class> 
</listener> 

希望、ありがとう。

+0

しかし、セッションの作成後にユーザーが作成されます!!あなたのケースでは、彼は決してコレクションに追加されません – Youssef

+0

より良いアプローチは、あなたがあなたがHttpSessionBindingListener –

関連する問題

 関連する問題