1

我有以下问题。我使用 PrimeFaces 4.0-SNAPSHOT、JSF2.2 和 Glassfish 4.0 构建了一个基于 FORM 的登录。

如果我在单独的登录页面上使用它,登录就可以工作。但是,如果我想使用 PF Popup 构建登录,如http://www.primefaces.org/showcase/ui/dialogLogin.jsf上的展示示例所示,我会登录,但不会转发到受保护的站点。

如果我单击以受保护区域为目标的链接,然后单击登录对话框链接,我只会被转发。

似乎基于表单的登录仅在我可以在使用登录对话框时以某种方式定位受保护区域时才有效。我可以使用 loginBean 执行此操作,还是仅使用基于 FORM 的身份验证执行此操作?有人可以指出我可能的解决方案吗?我是这个环境的新手,找不到与基于表单的登录和弹出对话框相结合的解决方案。

非常感谢。

触发弹出的链接:

<h:outputLink id="loginLink" value="javascript:void(0)" onclick="PF('dlg').show()" title="login" class="sign_in" >Sign in here!</h:outputLink>

登录表单:

    <p:dialog id="logindialog" header="Login" widgetVar="dlg" resizable="false">  
        <h:form id="login" onsubmit="document.getElementById('login').action='j_security_check';" prependId="false">  
            <p:growl id="growl" showDetail="true" life="3000" />  
            <h:panelGrid columns="3" cellpadding="5">
                 <h:outputLabel for="j_username" value="Username:" />
                <p:inputText id="j_username" />
                <p:tooltip for="j_username" value="Bitte Benutzernamen eingeben" showEffect="fade" hideEffect="fade" />
                <h:outputLabel for="password" value="Password:" />  
                <p:password id="j_password" />
                <p:tooltip for="j_password" value="Bitte Passwort eingeben" showEffect="fade" hideEffect="fade" />
                <f:facet name="footer">  
                        <div style="text-align: center">
                        <p:commandButton id="submit" value="Login" ajax="false" oncomplete="app/index?faces-redirect=true"/> 
                        </div>
                    </f:facet>
            </h:panelGrid>
        </h:form>  
     </p:dialog> 

web.xml

<security-constraint>
          <display-name>Mofnug Pages</display-name>
          <web-resource-collection>
              <web-resource-name>Protected Mofnug Area</web-resource-name>
              <description></description>
              <url-pattern>/faces/app/*</url-pattern>
              <http-method>GET</http-method>
              <http-method>POST</http-method>
              <http-method>HEAD</http-method>
              <http-method>PUT</http-method>
              <http-method>OPTIONS</http-method>
              <http-method>TRACE</http-method>
              <http-method>DELETE</http-method>
          </web-resource-collection>
          <auth-constraint>
              <description/>
              <role-name>admin</role-name>
          </auth-constraint>
          <user-data-constraint>
              <transport-guarantee>NONE</transport-guarantee>
          </user-data-constraint>
      </security-constraint>

      <login-config>
        <auth-method>FORM</auth-method>
        <realm-name>mofnug</realm-name>
        <form-login-config>
            <form-login-page>/faces/index.xhtml</form-login-page>
            <form-error-page>/faces/loginerror.xhtml</form-error-page>
        </form-login-config>
    </login-config>
4

1 回答 1

-1

您是否在打开对话框的输出链接上尝试过类似 oncomplete="/app/index" 的操作?

于 2013-09-04T08:39:46.140 回答