HttpSession - как получить session.setAttribute? - PullRequest
9 голосов
/ 04 октября 2011

Я создаю контейнер HttpSession следующим образом:

@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());

И у меня есть SessionListener, который должен дать мне информацию о созданной сессии:

@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());
    ...
  }
}

Как я могу получить атрибут username?

Если я пытаюсь сделать это, используя System.out.println("User name: " + session.getAttribute("username")), то получится java.lang.NullPointerException ..

Ответы [ 2 ]

13 голосов
/ 04 октября 2011

Интерфейс HttpSessionListener используется для мониторинга, когда сеансы создаются и уничтожаются на сервере приложений.HttpSessionEvent.getSession() возвращает вам сеанс, который был недавно создан или уничтожен (в зависимости от того, вызван ли он sessionCreated / sessionDestroyed соответственно).

Если вы хотите существующий сеанс, вам нужно будет получить сеансиз запроса.

HttpSession session = request.getSession(true).
String username = (String)session.getAttribute("username");
4 голосов
/ 04 октября 2011

session.getAttribute("key") возвращает значение типа java.lang.Object, если данный ключ найден.В противном случае возвращается ноль.

String userName=(String)session.getAttribute("username");

if(userName!=null)
{
  System.out.println("User name: " + userName);
}
...