I have a managed bean LoginBean:
@ManagedBean(name = "loginBean")
@SessionScoped
public class LoginBean implements Serializable {
private String email, password;
private BasicUser user;
public LoginBean() {
}
public void setUser(BasicUser user) {
this.user = user;
}
public BasicUser getUser() {
return user;
}
...
}
And then a PhaseListener that receives loginBean sessions.
public class FacebookSignInListener implements PhaseListener, UserService {
private LoginBean bean;
....
@Override
public PhaseId getPhaseId() {
return PhaseId.RENDER_RESPONSE;
}
@Override
public void afterPhase(PhaseEvent event) {
HttpSession session = (HttpSession) event.getFacesContext().getExternalContext().getSession(true);
bean = (LoginBean) session.getAttribute("loginBean");
bean.setUser(facebookUser);
}
@Override
public void beforePhase(PhaseEvent event) {
FacesContext fc = FacesContext.getCurrentInstance();
request = (HttpServletRequest) fc.getExternalContext().getRequest();
boolean isLoginPage =
(fc.getViewRoot().getViewId().indexOf("welcome") > -1);
if (isLoginPage) {
try {
FBOauth fbo = new FBOauth(this);
fbo.doLogin(request);
} catch (IOException ex) {
Logger.getLogger(FacebookSignInListener.class.getName()).log(Level.SEVERE, "Could not exchange code for access_token. Page where not found.", ex);
}
}
}
@Override
public boolean authFacebookLogin(String accessToken, FacesContext fc) throws FacebookException {
if (accessToken != null) {
FacebookClient facebookClient = new DefaultFacebookClient(accessToken);
User fbUser = facebookClient.fetchObject("me", User.class);
UserHelper uh = new UserHelper();
FacebookUser facebookUser = (FacebookUser) uh.getByFacebookId(fbUser.getId());
if (facebookUser != null) {
return true;
}
}
}
}
When I, after deploying to the admin console, click on the launch application, log in to my application via facebook, there are no problems with the code below. I can log out and log back in and still not a problem. If I then change my browser and try to log in via facebook, here I get a NullPointerException where I do
bean.setUser (facebookUser)
This also happens if I close the first browser, open again and try to log in via facebook. Why is this happening?
I am using Glassfish v3.