session.setAttribute("user", user);
私の欲しいのは、自分のプログラムにログインしているすべてのユーザーのリストです。
アカウントごとにアクセスする必要があるため、このリストで同時にログインを確認する必要があります。
PS:私はちょうどMVC Interceptor
とpreHandle()
session.setAttribute("user", user);
私の欲しいのは、自分のプログラムにログインしているすべてのユーザーのリストです。
アカウントごとにアクセスする必要があるため、このリストで同時にログインを確認する必要があります。
PS:私はちょうどMVC Interceptor
とpreHandle()
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);
}
}
あなたがの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>
希望、ありがとう。
しかし、セッションの作成後にユーザーが作成されます!!あなたのケースでは、彼は決してコレクションに追加されません – Youssef
より良いアプローチは、あなたがあなたがHttpSessionBindingListener –
ログイン属性の作成を忘れましたが、それは簡単です。 –
ありがとうございます、私はコピーしようとしているアイデアはアプリケーションコンテキスト - >セッション>ユーザーです。 – amitmah
@amitmahあなたは 'ServletContext context'を使用しませんでしたか? – Youssef