0

我想为管理员创建登录功能,以便管理员可以作为任何用户(在用户门户中)登录(从管理员门户)。(这是在两个不同主机上运行的两个不同门户)。

在 Admin-portal 中,我写过

<p:dialog>  
    <form action="http://user-portal.com/index.jsf" method="post"
        target="_blank">
        <h:inputHidden id="adminId" value="#{userListBean.openAdminId}"></h:inputHidden>
        <h:inputHidden id="clientId" value="#{userListBean.openClientId}"></h:inputHidden>
        <!-- some other security parameters -->
       <input type="submit" value="login"></input>
    </form>
</p:dialog>

问题出在用户门户中。
索引.jsf

<h:body>
    #{customLogin}
</h:body>  

自定义登录 bean

@Named("customLogin")
@SessionScoped
public class CustomLogin implements Serializable {
.
.
@PostConstruct
public void customLoginPage() {
    HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance()
                    .getExternalContext().getRequest();
    Map<String, String[]> requestParaMap = request.getParameterMap();
    // some admin and user validation and setting other injected bean property base on it
    HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance()
                    .getExternalContext().getResponse();
    string serverName = request.getServerName();
    response.sendRedirect(serverName+ "/home.jsf");
    // also tried this
    // facesContext.getExternalContext().redirect("/home.jsf");
    return;
}

CustomLogin bean 是会话范围的,并且在构造后调用方法“customLoginPage”。所以它在 J​​SF 生命周期的“RESTORE_VIEW”阶段运行。

我收到以下错误:

javax.faces.application.ViewExpiredException: viewId:/index.jsf - View /index.jsf could not be restored.
    at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:205) [jsf-impl-2.1.28.redhat-3.jar:2.1.28.redhat-3]
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) [jsf-impl-2.1.28.redhat-3.jar:2.1.28.redhat-3]
    at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:116) [jsf-impl-2.1.28.redhat-3.jar:2.1.28.redhat-3]
    at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) [jsf-impl-2.1.28.redhat-3.jar:2.1.28.redhat-3]
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) [jboss-jsf-api_2.1_spec-2.1.28.Final-redhat-1.jar:2.1.28.Final-redhat-1]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
    .
    .
    .
12:21:24,683 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/].[Faces Servlet]] (http-localhost/127.0.0.1:8080-1) JBWEB000236: Servlet.service() for servlet Faces Servlet threw exception: java.lang.IllegalStateException
    at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:420) [jbossweb-7.4.8.Final-redhat-4.jar:7.4.8.Final-redhat-4]
    at com.sun.faces.context.ExternalContextImpl.redirect(ExternalContextImpl.java:602) [jsf-impl-2.1.28.redhat-3.jar:2.1.28.redhat-3]
    at javax.faces.context.ExternalContextWrapper.redirect(ExternalContextWrapper.java:462) [jboss-jsf-api_2.1_spec-2.1.28.Final-redhat-1.jar:2.1.28.Final-redhat-1]

很少有可能有用的web.xml内容

<context-param>
    <param-name>javax.faces.STATE_SAVING_METHOD</param-name>
    <param-value>server</param-value>
</context-param>
<context-param>
  <param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
  <param-value>false</param-value>
</context-param>

<context-param>             
  <param-name>javax.faces.RESOURCE_EXCLUDES</param-name>
  <param-value>.xhtml .class .properties .xml</param-value>
</context-param>

<context-param>
    <param-name>facelets.DEVELOPMENT</param-name>
    <param-value>true</param-value>
</context-param>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

我已阅读BalusC 的 ViewExpiredException。但是这里对用户门户的每个请求都是新鲜的。另外,当我将 javax.faces.STATE_SAVING_METHOD 更改为客户端时,我收到“GZIP 异常”。

4

0 回答 0