jsf-2 - 使用 cookie 的“记住我”功能

标签 jsf-2 remember-me

我正在尝试使用 JSF 2.0 实现“记住我”功能,但不确定如何实现 COOKIES 来做到这一点。您能分享一个有效的示例代码吗?

最佳答案

编辑:不要在 cookie 中存储密码或用户名!

See this post by BalusC for a better implementation.


我相信这可能对您有帮助:

login.xhtml

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:h="http://java.sun.com/jsf/html"
  xmlns:f="http://java.sun.com/jsf/core" 
  xmlns:ui="http://java.sun.com/jsf/facelets" 
  xmlns:a4j="http://richfaces.org/a4j"
  xmlns:rich="http://richfaces.org/rich">

<h:body>
   <h:form id="LoginForm">

<h:panelGrid id="lpg" columns="4" >
<h:outputText value="User Id"/> 
<h:inputText id="username" value="#{loginBean.userId}"/>
<h:outputText value=""/>

<h:outputText value="Password"/> 
<h:inputSecret id="password" value="#{loginBean.password}"/>
<h:outputText value=""/>

<h:outputText value=""/>
<h:outputText value=""/>
<h:outputText value=""/>
<h:outputText value=""/>
<h:selectBooleanCheckbox value="#{loginBean.checkBox}" />
<h:outputText value="Remember me" />
<h:outputText value=""/>
<h:outputText value=""/>
<h:commandButton value="Login" action="#{loginBean.doLogin}"/>

</h:form>
</h:body>

</html>

LoginBean.java

public class LoginBean {


private String userId;
private String password;
private boolean checkBox = false;
private String virtualCheck;

    // Setter and getter

    public LoginBean() {
    isChecked();
}

public void isChecked() {
    FacesContext fc = FacesContext.getCurrentInstance();
    Cookie[] cookiesArr = ((HttpServletRequest)(fc.getExternalContext().getRequest())).getCookies();
    if(cookiesArr != null && cookiesArr.length > 0)
        for(int i =0; i < cookiesArr.length; i++) {
            String cName = cookiesArr[i].getName();
            String cValue= cookiesArr[i].getValue();
            System.out.println("***cValue***"+cValue);
            if(cName.equals("cUserId")) {
                setUserId(cValue);
            } else if(cName.equals("cPassword")) {
                setPassword(cValue);
            } else if(cName.equals("cVirtualCheck")) {
                setVirtualCheck(cValue);
                if(getVirtualCheck().equals("false")) {
                    setCheckBox(false);
                    setUserId(null);
                    setPassword(null);
                } else if(getVirtualCheck().equals("true")) {
                    System.out.println("Here in doLogin() line 99");
                    setCheckBox(true);
                }
            }
        }

}

    public String doLogin() {
        if(userId != null && password!= null){
        FacesContext fc = FacesContext.getCurrentInstance();
        if(checkBox == true) {
            virtualCheck = "true";
            Cookie cUserId = new Cookie("cUserId", userId);
            Cookie cPassword = new Cookie("cPassword", password);
            Cookie cVirtualCheck = new Cookie("cVirtualCheck", virtualCheck);
            cUserId.setMaxAge(3600);
            cPassword.setMaxAge(3600);
            cVirtualCheck.setMaxAge(3600);
            ((HttpServletResponse)(fc.getExternalContext().getResponse())).addCookie(cUserId);
            ((HttpServletResponse)(fc.getExternalContext().getResponse())).addCookie(cPassword);
            ((HttpServletResponse)(fc.getExternalContext().getResponse())).addCookie(cVirtualCheck);
        } else {
            virtualCheck = "false";
            Cookie cVirtualCheck = new Cookie("cVirtualCheck", virtualCheck);
            ((HttpServletResponse)(fc.getExternalContext().getResponse())).addCookie(cVirtualCheck);
        }
                return "success";
    }

注意为了保存密码,浏览器将提示是否保存密码,无论 Java Web 技术如何,浏览器设置和检索 cookie 将发挥主要作用。

关于jsf-2 - 使用 cookie 的“记住我”功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24034714/

相关文章:

spring-mvc - Spring Security - 记住我的身份验证错误

css - JSF h :outputStylesheet id attribute not working

jsf - 显示 p :dialog using oncomplete only if custom validation in action was passed

jsf-2 - 如何在 HTML 上显示 javascript 值

cookies - 如何使用基于 Spring Security 持久 token 的 RememberMe 服务以编程方式注销

javascript - 如何使用 authToken 在 angularjs 中实现记住我?

spring-security - Spring security Remember me 在 spring MVC 应用程序中不起作用。

jsf-2 - JSF facelets 模板打包

java - Primefaces SelectCheckboxMenu 空值

php - 在 PHP 中进行身份验证的最佳方式