web-dev-qa-db-fra.com

HttpSession - comment obtenir la session.setAttribute?

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 ..

9
gaffcz

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");
13
Buhake Sindi

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);
}
4
adatapost