Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf SimpleCRUD登录失败_Jsf_Jpa_Jakarta Ee_Jaas_Apache Tomee - Fatal编程技术网

Jsf SimpleCRUD登录失败

Jsf SimpleCRUD登录失败,jsf,jpa,jakarta-ee,jaas,apache-tomee,Jsf,Jpa,Jakarta Ee,Jaas,Apache Tomee,我正在使用的平台: 软呢帽20 mariadb-5.5.34-2.fc20.x86_64 www.Eclipse.org上的Eclipse开普勒服务发布 ApacheTomee plus 1.6.0 我正在实现一个示例 我正在尝试使用登录界面。我的问题是login.xhtml网页正确获取用户名和密码,但是 public void login(ActionEvent actionEvent) java对网页登录按钮的响应不正确。特别是,该网页没有说明用户名和密码的正确性。要查看应该发生什

我正在使用的平台

  • 软呢帽20
  • mariadb-5.5.34-2.fc20.x86_64
  • www.Eclipse.org上的Eclipse开普勒服务发布
  • ApacheTomee plus 1.6.0
我正在实现一个示例

我正在尝试使用登录界面。我的问题是login.xhtml网页正确获取用户名和密码,但是

public void login(ActionEvent actionEvent) 
java对网页登录按钮的响应不正确。特别是,该网页没有说明用户名和密码的正确性。要查看应该发生什么,请参见上一链接中的交互式示例。 取而代之的是我电脑上发生的事情的简短视频

为了了解发生了什么,我将一些控制台输出放在JavaBean中,我发现getter/setter方法正在工作,唯一不工作的方法是

public void login(ActionEvent actionEvent) 
确实是印刷品

System.out.println("Entering in public void login(ActionEvent actionEvent)");
不会出现在控制台中

Login.xml

<ui:composition template="/templates/layout.xhtml"
     xmlns="http://www.w3.org/1999/xhtml"
     xmlns:f="http://java.sun.com/jsf/core"
     xmlns:h="http://java.sun.com/jsf/html"
     xmlns:ui="http://java.sun.com/jsf/facelets"
     xmlns:p="http://primefaces.org/ui"
>
     <ui:define name="content">
         <h:form styleClass="loginPanelStyle">
                 <p:growl id="msgs" showDetail="true" sticky="false" />                        
                <p:panelGrid columns="2">
                <f:facet name="header">
                    Login Panel
                </f:facet>
                <h:outputText value="Username : "></h:outputText>
                <p:inputText id="username" value="#{loginController.username}" required="true" requiredMessage="Please Enter Username!" message="fc">
                    <f:validateLength minimum="1" />  
                </p:inputText>
                <h:outputText value="Password : "></h:outputText>
                <p:password id="password" value="#{loginController.password}" required="true" requiredMessage="Please Enter password!">
                    <f:validateLength minimum="1" />  
                </p:password>
                <f:facet name="footer">
                <p:commandButton value="Submit" update="msgs" action="#{loginController.login}" 
    icon="ui-icon-check" style="margin:0" />
                </f:facet> 
            </p:panelGrid>
        </h:form>
     </ui:define>
</ui:composition>
里面是什么(2):

我上载了两个conf目录,以便您可以查阅它们

要将TomEE配置为使用JAAS操作,我要求: 所以我用这种方式在Eclipse中配置了TomEE

  • 我在apache-tomee-plus-1.6.0-JAAS/conf/server.xml中添加了JAAS标记
  • 在中添加了login.config和login.properties apache-tomee-plus-1.6.0-JAAS/conf/
视频控制台


将commandButton标记的属性改为
actionListener
而不是
action
应该可以解决问题。

你能发布你的web.xml文件吗?你可以在帖子中找到Github链接:-)我在这里再次粘贴它尝试将commandButton标记的属性改为
actionListener
填写答案,而不是
操作
@Omar,这样我就可以给你打绿色分数了
<p:commandButton value="Submit" update="msgs" action="#{loginController.login}" icon="ui-icon-check" style="margin:0" />
<p:commandButton value="Submit" update="msgs" action="#{loginController.login}" icon="ui-icon-check" style="margin:0" />
package controller;

import util.DateUtility;
import java.io.IOException;
import java.io.Serializable;
import java.security.Principal;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.enterprise.context.SessionScoped;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

/**
 * Login Controller class allows only authenticated users to log in to the web
 * application.
 *
 * @author Emre Simtay <emre@simtay.com>
 */
@Named
@SessionScoped
public class LoginController implements Serializable {

    @Inject
    private transient Logger logger;
    private String username;
    private String password;

    /**
     * Creates a new instance of LoginController
     */
    public LoginController() {
        System.out.println("LoginController instantiated");
    }

    //  Getters and Setters
    /**
     * @return username
     */
    public String getUsername() {
        System.out.println("getUsername: " + username);
        return username;
    }

    /**
     *
     * @param username
     */
    public void setUsername(String username) {
        this.username = username;
        System.out.println("setUsername sets username: " + this.username);
    }

    /**
     *
     * @return password
     */
    public String getPassword() {
        System.out.println("getPassword is: " + password);
        return password;
    }

    /**
     *
     * @param password
     */
    public void setPassword(String password) {
        this.password = password;
        System.out.println("setPassword sets password: " + this.password);
    }

    /**
     * Listen for button clicks on the #{loginController.login} action,
     * validates the username and password entered by the user and navigates to
     * the appropriate page.
     *
     * @param actionEvent
     */
    public void login(ActionEvent actionEvent) {
        System.out.println("Entering in public void login(ActionEvent actionEvent)");
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
        try {
            String navigateString = "";
            // Checks if username and password are valid if not throws a ServletException
            request.login(username, password);
            // gets the user principle and navigates to the appropriate page
            Principal principal = request.getUserPrincipal();
            if (request.isUserInRole("Administrator")) {
                navigateString = "/admin/AdminHome.xhtml";
            } else if (request.isUserInRole("Manager")) {
                navigateString = "/manager/ManagerHome.xhtml";
            } else if (request.isUserInRole("User")) {
                navigateString = "/user/UserHome.xhtml";
            }
            try {
                logger.log(Level.INFO, "User ({0}) loging in #" + DateUtility.getCurrentDateTime(), request.getUserPrincipal().getName());
                context.getExternalContext().redirect(request.getContextPath() + navigateString);
            } catch (IOException ex) {
                logger.log(Level.SEVERE, "IOException, Login Controller" + "Username : " + principal.getName(), ex);
                context.addMessage(null, new FacesMessage("Error!", "Exception occured"));
                System.out.println("(DEBUG) CONSOLE OUTPUT: Error!, Exception occured");
            }
        } catch (ServletException e) {
            logger.log(Level.SEVERE, e.toString());
            context.addMessage(null, new FacesMessage("Error!", "The username or password you provided does not match our records."));
            System.out.println("(DEBUG) CONSOLE OUTPUT: Error!, The username or password you provided does not match our records.");
        }
    }

    /**
     * Listen for logout button clicks on the #{loginController.logout} action
     * and navigates to login screen.
     */
    public void logout() {

        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
        HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        logger.log(Level.INFO, "User ({0}) loging out #" + DateUtility.getCurrentDateTime(), request.getUserPrincipal().getName());
        if (session != null) {
            session.invalidate();
        }
        FacesContext.getCurrentInstance().getApplication().getNavigationHandler().handleNavigation(FacesContext.getCurrentInstance(), null, "/Login.xhtml?faces-redirect=true");
    }
}
.
├── catalina.policy
├── catalina.properties
├── context.xml
├── groups.properties
├── logging.properties
├── login.config
├── server.xml
├── server.xml.original
├── system.properties
├── tomcat-users.xml
├── tomcat-users.xml.original
├── tomee.xml
├── users.properties
└── web.xml

0 directories, 14 files
.
├── catalina.policy
├── catalina.properties
├── context.xml
├── server.xml
├── tomcat-users.xml
└── web.xml