JAAS + Primefaces:登录表单不会重定向到错误页面

时间:2014-11-23 10:52:18

标签: java jsf java-ee jsf-2 primefaces

我相信您可以帮助我解决以下问题。

我开始使用Java EE和Primefaces进行冒险,需要一些帮助来理解/解决问题。

所以我使用Jaas及以下配置创建了登录模块:

的web.xml

<login-config>
    <auth-method>FORM</auth-method>
    <realm-name>authRealm</realm-name>
    <form-login-config>
        <form-login-page>/public/login.xhtml</form-login-page>
        <form-error-page>/public/loginError.xhtml</form-error-page>
    </form-login-config>
</login-config>

login_page_1.xhtml

<p:panel header="Login From">
    <form method="POST" action="j_security_check">
        Username: <input type="text" name="j_username" />
        Password: <input type="password" name="j_password" />
        <br />
        <input type="submit" value="Login" />
        <input type="reset" value="Reset" />
    </form> 
</p:panel>

这个配置工作得很好但是因为我使用primefaces作为前端框架我想让我的页面看起来更好。我发现以下分辨率:

login_page_2.xhtml

<p:panel header="Login From">
    <h:form id="loginForm" onsubmit="document.getElementById('loginForm').action='j_security_check';" prependId="false">
        <p:panelGrid columns="2"> 
            <p:outputLabel for="j_username" value="Email" />
            <p:inputText id="j_username" />

            <p:outputLabel for="j_password" value="Passwort" />
            <p:password id="j_password"/>

            <p:commandButton id="login" value="Login" ajax="false" />
        </p:panelGrid>
    </h:form>
</p:panel>

问题在于,当我使用login_page_1.xhtml并输入错误的凭据(错误的用户名/密码)时,我被重定向到errorLogin.xhtml(这是理想的行为)但是当我使用login_page_2.xhtml时低于erorr

An Error Occurred:

Index: 0, Size: 0

Warning:   WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception
Warning:   WEB9102: Web Login Failed: com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Security Exception
FATAL:   JSF1073: javax.faces.FacesException caught during processing of RESTORE_VIEW 1 : UIComponent-ClientId=, Message=Unexpected error restoring state for component with id j_idt6.  Cause: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0.
FATAL:   Unexpected error restoring state for component with id j_idt6.  Cause: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0.
javax.faces.FacesException: Unexpected error restoring state for component with id j_idt6.  Cause: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0.

我将不胜感激任何帮助!

提前致谢。

1 个答案:

答案 0 :(得分:0)

只需删除onsubmit和prependId属性即可。 像这样的东西应该工作..你需要实现一个登录方法。

<p:panel header="Login From">
    <h:form id="loginForm" >
        <p:panelGrid columns="2"> 
            <p:outputLabel for="j_username" value="Email" />
            <p:inputText id="j_username" />

            <p:outputLabel for="j_password" value="Passwort" />
            <p:password id="j_password"/>

            <p:commandButton id="login" value="Login" action="#{aMethod}" />
        </p:panelGrid>
    </h:form>
</p:panel>