Java JSF保存我的cookie并获取空数组

Java JSF保存我的cookie并获取空数组,java,jsf,cookies,web,Java,Jsf,Cookies,Web,我正在建立一个简单的登录用户名,密码和记住我的选项。与所有网页一样,我希望保存密码和用户名(或自动登录访问者)。我尝试使用cookies,但在尝试加载cookies时: FacesContext facesContext = FacesContext.getCurrentInstance(); Cookie cookie[] = ((HttpServletRequest) facesContext.getExternalContext().getRequest()).getCookies();

我正在建立一个简单的登录用户名,密码和记住我的选项。与所有网页一样,我希望保存密码和用户名(或自动登录访问者)。我尝试使用cookies,但在尝试加载cookies时:

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
        }
    }
}
package es.web.login;
导入java.util.Map;
导入javax.faces.bean.ManagedBean;
导入javax.faces.bean.SessionScoped;
导入javax.faces.context.FacesContext;
导入javax.servlet.http.Cookie;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
/**
*
*@作者阿德里安·斯特凡诺夫斯基
*/
@ManagedBean(name=“visitor”,eager=true)
@会议范围
公开期末班访客{
私人城市;
私有字符串用户名;
私有字符串密码;
私有布尔记忆;
字符串记住\u String=“false”;
公众访客(){
checkCookie();
}
公共字符串getCity(){
回归城市;
}
公共城市(字符串城市){
this.city=城市;
}
公共字符串getUsername(){
返回用户名;
}
public void setUsername(字符串用户名){
this.username=用户名;
}
公共字符串getPassword(){
返回密码;
}
public void setPassword(字符串密码){
this.password=密码;
}
公共void集合记住(布尔记住){
记住,记住;
}
公共布尔getRemember(){
还记得;
}
公共字符串登录(){
if(username.equals(“dino”)&password.equals(“dino”)){
FacesContext FacesContext=FacesContext.getCurrentInstance();
Cookie user\u Cookie=新Cookie(“user\u Cookie”,用户名);
Cookie password\u Cookie=新Cookie(“password\u Cookie”,password);
如果(记住==false){
记住_string=“false”;
}否则{
记住_string=“true”;
}
Cookie memore\u Cookie=新Cookie(“memore\u Cookie”,memore\u string);
用户_cookie.setMaxAge(3600);
密码\u cookie.setMaxAge(3600);
记住_cookie.setMaxAge(3600);
如果(记住){
用户_cookie.setMaxAge(3600);
密码\u cookie.setMaxAge(3600);
记住_cookie.setMaxAge(3600);
}否则{
用户_cookie.setMaxAge(0);
密码\u cookie.setMaxAge(0);
记住_cookie.setMaxAge(0);
}
((HttpServletResponse)facesContext.getExternalContext().getResponse()).addCookie(用户cookie);
((HttpServletResponse)facesContext.getExternalContext().getResponse()).addCookie(密码\u cookie);
((HttpServletResponse)facesContext.getExternalContext().getResponse()).addCookie(记住\u cookie);
返回“logedin”;
}否则{
返回“失败”;
}
}
公共void checkCookie(){
FacesContext FacesContext=FacesContext.getCurrentInstance();
Cookie Cookie[]=((HttpServletRequest)facesContext.getExternalContext().getRequest()).getCookies();
Map requestCookieMap=facesContext.getExternalContext().getRequestCookieMap();
int length=requestCookieMap.size();
字符串cookieName;
如果(cookie!=null&&cookie.length>0){
用于(Cookie cookie1:Cookie){
cookieName=cookie1.getName();
开关(cookieName){
案例“用户_cookie”:
username=cookie1.getValue();
打破
案例“密码\u cookie”:
password=cookie1.getValue();
打破
案例“记住饼干”:
记住_string=cookie1.getValue();
if(记住_string.equals(“false”)){
记住=错误;
}else if(记住_string.equals(“true”)){
记住=正确;
}
打破
}
}
}否则{
//“找不到任何cookie
}
}
}

希望有人能帮我。顺便说一句,这是我使用jsf的第一天,我希望我没有犯明显的错误。还有人能告诉我,如果我的浏览器(在这个例子中是google chrome)可以阻止我的web应用保存Cookie吗?

查看如何在JSF中设置和获取Cookie。它包含CookieHelper类的代码,可在一个应用程序中多次使用。该类的目的是在一个类中单独设置与Cookie相关的代码,而该类与业务逻辑无关。

检查此项。这是设置和获取Cookie的代码(在我的项目中工作正常)。问题可能与cookie过期时间有关-请参阅
cookie.setMaxAge(过期)
在上一个评论链接中。@VasilLukach我在设置最大年龄方面找不到任何问题。我尝试了你的代码,效果很好。你可以将其作为答案发布,这样我就可以将其标记为我问题的解决方案。谢谢。很高兴提供帮助。