J_security_check 在 Firefox 4 中失败

Posted

技术标签:

【中文标题】J_security_check 在 Firefox 4 中失败【英文标题】:J_scurity_check fails in Firefox 4 【发布时间】:2011-08-21 20:07:15 【问题描述】:

应用程序在 Firefox3.6 和所有版本的 IE 中都能正常运行。我下载了 Firefox 4 并尝试登录。当我输入用户名和密码并单击提交按钮时,它只是清除标签,当我点击刷新按钮时,它会提交表单。如果我输入错误的用户名和密码,它会重定向到错误页面。

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

日志中没有错误消息。

【问题讨论】:

【参考方案1】:

我仍然不知道您的问题,因为您没有提供有关您的环境和应用程序的太多详细信息。例如,您是否在登录页面中使用任何 javascript 或 ajax?标签之间是否有一些格式错误的标签?

就我而言,我使用的是 java-ee-5、JSF 2.0 框架(我的登录页面在 Firefox 3.6、Opera 11 和 IE8 中有效,但在 Google Chrome 中无效)

这是我的工作登录页面(在 Firefox 3.6.17 和 4.0.1 上测试)。

 <?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:p="http://primefaces.prime.com.tr/ui"
          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:o="http://openfaces.org/">
        <h:head>
            <div align="center">
                <h:outputText value="Logon" 
                              style="text-align: center;font-weight: bolder"/>
                <br />
            </div>
            <h:outputStylesheet name="css/style.css"/> 
            <link rel="icon" href="#resource['images/diagnostic.ico']" type="image/x-icon"/>
            <link rel="shortcut icon" href="#resource['images/diagnostic.ico']" type="image/x-icon"/>
        </h:head>
        <h:body style="font-weight: lighter;background: url(#resource['images/master-bg.jpg']);background-repeat: repeat;">
    <h:form id="logonform" onsubmit="document.logonform.action = 'j_security_check';">
                        <p:panel header="#bundle.Login" style="font-weight: lighter">
                            <h:panelGrid columns="2">
                                <h:outputLabel for="j_username" value="#bundle.Username" style="font-weight: bold;"/>
                                <input id="usernameid" type="text" name="j_username" />

                                <h:outputLabel for="j_password" value="#bundle.Password" style="font-weight: bold;"/>

                                <input type="password" name="j_password" />
                                <h:outputText value="" />
                                <h:panelGrid columns="2">
                                    <p:commandButton value="Connexion" type="submit" ajax="false"/>
                                    <p:button outcome="Logon" value="Cancel" />
                                </h:panelGrid>
                            </h:panelGrid>
                        </p:panel>
                    </h:form>
    </h:body>
    </html>

我使用与您相同的纯 html 表单,它在 Firefox 4.0.1 中也适用于我,甚至比 3.6.17 更好。

【讨论】:

【参考方案2】:

我也在寻找这个问题的答案。我正在开发一个在 Glassfish 中运行的 JavaEE6/JSF2 Web 应用程序(最初是 3.0.1,现在是 3.1)。

基于 FORM 的登录在 Firefox3.x 版本上运行良好,在 Safari5.0.5 上仍然运行良好,但在 Firefox4.0.1 和 Google Chrome 12.0.742.91 上“静默失败”。 (我在 Mac OS X 上,没有检查过 IE。)

提供诊断非常困难,因为没有。

问:我可以为 Firefox 和/或 Google Chrome 打开其他日志或可能的诊断来源吗?

这是我的表格:

 <form  id="loginForm" method="POST" action="j_security_check">

<h:panelGrid columns="3" styleClass="login" columnClasses="login-label, login-field">
<h:outputLabel for="j_username">Username:</h:outputLabel>
<h:inputText id="j_username" required="true" />
<h:message for="j_username" />

<h:outputLabel for="j_password">Password:</h:outputLabel>
<h:inputSecret id="j_password" required="true" />
<h:message for="j_password" />

<h:outputLabel for="login_button"></h:outputLabel>
<h:commandButton id="login_button" value="Login" />
</h:panelGrid>

这类似于其他地方显示的声称与 Firefox 4 兼容的示例,例如来自此处(为尊重此处未复制的版权条件,请检查外部链接然后返回): enter link description here

该登录表单声称与 Mozilla Firefox 4、Internet Explorer 8、Chrome 11、Safari 5、Opera 11 兼容。但我看不出它与我自己的有很大不同。

【讨论】:

好吧,我刚刚测试了javaevangelist.blogspot.com/2011/06/… 讨论的那个,你可以从commondatastorage.googleapis.com/bluelotussoftware/code/… 下载它,它在 Firefox4 和 Google Chrome 12 中都对我有用,但我看不出有什么区别他和我之间是(除了在表格中使用名称而不是id,我在我的尝试但没有工作)。 好的,我找到了我的问题;我使用的是具有外部 h:form; 的 ui:composition 模板;嵌套表单在 Firefox4 和 Chrome12 上失败,但在其他浏览器上没有。我修复了它制作一个没有外部 h:form 的迷你模板,我可以安全地将我的登录表单注入其中。虽然这不太可能适用于您的情况,但您可以检查此项以排除嵌套表单的可能性。

以上是关于J_security_check 在 Firefox 4 中失败的主要内容,如果未能解决你的问题,请参考以下文章

如果 JSF 页面受 j_security_check 保护,则不会在 ajax 请求上引发 ViewExpiredException

J_security_check 在 Firefox 4 中失败

如何使用 j_security_check 在 React.JS 应用程序上对用户进行身份验证

使用 j_security_check 在 Java EE / JSF 中执行用户身份验证

在 Tomcat 上拦截 j_security_check 以在 Struts 2 中将用户名修改为 LDAP

使用 Servlet 过滤器和 j_security_check 登录时出现无限循环