Je crée le conteneur HttpSession de cette façon:
@SessionScoped
@ManagedBean(name="userManager")
public class UserManager extends Tools
{
/* [private variables] */
...
public String login()
{
/* [find user] */
...
FacesContext context = FacesContext.getCurrentInstance();
session = (HttpSession) context.getExternalContext().getSession(true);
session.setAttribute("id", user.getID());
session.setAttribute("username", user.getName());
...
System.out.println("Session id: " + session.getId());
Et j'ai SessionListener qui devrait me donner des informations sur la session créée:
@WebListener
public class SessionListener implements HttpSessionListener
{
@Override
public void sessionCreated(HttpSessionEvent event) {
HttpSession session = event.getSession();
System.out.println("Session id: " + session.getId());
System.out.println("New session: " + session.isNew());
...
}
}
Comment puis-je obtenir l'attribut username
?
Si je l'essaye en utilisant System.out.println("User name: " + session.getAttribute("username"))
il lance Java.lang.NullPointerException
..
L'interface HttpSessionListener
est utilisée pour surveiller quand des sessions sont créées et détruites sur le serveur d'applications. La fonction HttpSessionEvent.getSession()
vous renvoie une session nouvellement créée ou détruite (selon qu'elle est appelée par sessionCreated
/sessionDestroyed
respectivement).
Si vous voulez une session existante, vous devrez obtenir la session de la demande.
HttpSession session = request.getSession(true).
String username = (String)session.getAttribute("username");
La fonction session.getAttribute("key")
renvoie une valeur de Java.lang.Object
tapez si une clé donnée est trouvée. Il renvoie null sinon.
String userName=(String)session.getAttribute("username");
if(userName!=null)
{
System.out.println("User name: " + userName);
}