我正在使用用户名、密码和记住我选项构建一个简单的登录。像所有网页一样,我想保存密码和用户名(或自动登录访问者)。我尝试使用cookie,但是当我尝试加载它们时:
FacesContext facesContext = FacesContext.getCurrentInstance();
Cookie cookie[] = ((HttpServletRequest) facesContext.getExternalContext().getRequest()).getCookies();
我得到一个空数组。我多次调试代码,但仍然不知道为什么会得到一个空数组。每次使用以下代码启用“记住我”功能时,我都会保存 cookie:
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(user_cookie);
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(password_cookie);
((HttpServletResponse) facesContext.getExternalContext().getResponse()).addCookie(remember_cookie);
这是我的 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
}
}
}
希望有人能帮助我解决这个问题。顺便说一句,这是我使用 jsf 的第一天,我希望我没有犯一个明显的错误。另外有人可以告诉我我的浏览器(在本例中为 google chrome)是否可以阻止我的网络应用程序保存 cookie?
最佳答案
参见answer如何在 JSF 中设置和获取 cookie。它包含CookieHelper类的代码,该类可以在一个应用程序中多次使用。该类的目的是将与 cookie 相关的代码单独放在一个类中,与业务逻辑无关。
关于java - JSF 保存我的 cookie 并获取空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23429776/