I am building a simple login for with username, password and remember me option. Like all web pages i want to save the password and username (or automatically login the visitor). I tried using cookies but when i am trying to load them with:
FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie cookie[] = ((HttpServletRequest) facesContext.getExternalContext().getRequest()).getCookies();
I get an empty array. I was debugging my code many times and I still don't have a clue why a get an empty array. I save my cookies every time my remember me is enabled with this code:
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(user_cookie);
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(password_cookie);
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(remember_cookie);
Here is the complete code of my bean:
package es.web.login;
import java.util.Map;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author Adrian Stefanovski <adrian@elektrosoft.com.mk>
*/
@ManagedBean(name = "visitor", eager = true)
@SessionScoped
public final class Visitor {
private String city;
private String username;
private String password;
private boolean remember;
String remember_string = "false";
public Visitor() {
checkCookie();
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void setRemember(boolean remember) {
this.remember = remember;
}
public boolean getRemember() {
return remember;
}
public String login() {
if (username.equals("dino") && password.equals("dino")) {
FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie user_cookie = new Cookie("user_cookie", username);
Cookie password_cookie = new Cookie("password_cookie", password);
if (remember == false) {
remember_string = "false";
} else {
remember_string = "true";
}
Cookie remember_cookie = new Cookie("remember_cookie", remember_string);
user_cookie.setMaxAge(3600);
password_cookie.setMaxAge(3600);
remember_cookie.setMaxAge(3600);
if (remember) {
user_cookie.setMaxAge(3600);
password_cookie.setMaxAge(3600);
remember_cookie.setMaxAge(3600);
} else {
user_cookie.setMaxAge(0);
password_cookie.setMaxAge(0);
remember_cookie.setMaxAge(0);
}
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(user_cookie);
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(password_cookie);
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(remember_cookie);
return "logedin";
} else {
return "failure";
}
}
public void checkCookie() {
FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie cookie[] = ((HttpServletRequest) facesContext.getExternalContext().getRequest()).getCookies();
Map<String, Object> requestCookieMap = facesContext.getExternalContext().getRequestCookieMap();
int length = requestCookieMap.size();
String cookieName;
if (cookie != null && cookie.length > 0) {
for (Cookie cookie1 : cookie) {
cookieName = cookie1.getName();
switch (cookieName) {
case "user_cookie":
username = cookie1.getValue();
break;
case "password_cookie":
password = cookie1.getValue();
break;
case "remember_cookie":
remember_string = cookie1.getValue();
if (remember_string.equals("false")) {
remember = false;
} else if (remember_string.equals("true")) {
remember = true;
}
break;
}
}
} else {
//"Cannot find any cookie
}
}
}
Hope someone can help me with this. Btw this is my first day with jsf, i hope that i am not doing an obvious mistake. Also can someone tell me if my browser (in this case google chrome) can prevent my web app to save cookies?