Il HttpSessionBindingListener
deve essere implementato nella classe le cui istanze possono essere memorizzate nella sessione, ad esempio l'utente che ha effettuato l'accesso.
E.g.
public class ActiveUser implements HttpSessionBindingListener {
@Override
public void valueBound(HttpSessionBindingEvent event) {
logins.add(this);
}
@Override
public void valueUnbound(HttpSessionBindingEvent event) {
logins.remove(this);
}
}
Quando un'istanza di questo ActiveUser
ottenere impostato come attributo sessione HttpSession#setAttribute()
, poi il valueBound()
verrà richiamato. Quando viene rimosso da HttpSession#removeAttribute()
o annullato della sessione o sostituito da un altro HttpSession#setAttribute()
, viene richiamato lo valueUnbound()
.
Ecco alcuni casi di utilizzo reali:
Il HttpSessionAttributeListener
deve essere implementato come applicazione @WebListener
che viene richiamato quando qualsiasi attributo viene aggiunto, rimosso o sostituito in HttpSession
. Continuando con l'esempio precedente ActiveUser
, questo è particolarmente utile se non è possibile modificare la classe ActiveUser
per implementare HttpSessionBindingListener
(perché è di terza parte o così), o quando si desidera utilizzare una "interfaccia marker" su una quantità arbitraria di classi in modo da poter svolgere il lavoro di ascolto in un unico posto centrale.
@WebListener
public class ActiveUserListener implements HttpSessionAttributeListener {
@Override
public void attributeAdded(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.add(event.getValue());
}
}
@Override
public void attributeRemoved(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.remove(event.getValue());
}
}
@Override
public void attributeReplaced(HttpSessionBindingEvent event) {
if (event.getValue() instanceof ActiveUser) {
logins.add(event.getValue());
}
}
}
Ecco un vero e proprio caso d'uso mondo:
Grazie tanto @BalusC. Ho capito la differenza Grazie mille per la risposta dettagliata. – benz
Questa è un'ottima risposta. @BalusC come riesci a ottenere tutte queste informazioni e le presenti in modo così carino. – Makky
Prego. – BalusC