我相信您可以帮助我解决以下问题。
我开始使用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.
我将不胜感激任何帮助!
提前致谢。
答案 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>