1

JSF/IceFaces3 アプリケーションを実行しています。このアプリケーションは、SSO 経由でログインした後、イントラネット環境で実行する必要があります。ボスは、次のように呼び出すことができるリンクを提供するように私に言いました:

http://companieserver/FancyApplcation/indexsso?name=[ユーザー名]&psw=[ユーザーパスワード]

新参者として、サーブレットを作成し、web.xmlで言及しました

<servlet>
    <description>SSO Login calling with given Parameters Managed
 AuthenticationService</description>
    <display-name>SsoLogin</display-name>
    <servlet-name>SsoLogin</servlet-name>
    <servlet-class>de.bws.bewerberverwaltung.security.SsoLogin</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SsoLogin</servlet-name>
    <url-pattern>/indexsso</url-pattern>
  </servlet-mapping>
....

この SsoLogin サーブレットから、JSF/IceFaces3 アプリケーションにリダイレクトしたいと考えています。ここで私のアプローチ:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    FacesContext facesContext = getFacesContext(request, response);
    LoginBean loginBean = (LoginBean)getManagedBean("loginBean", facesContext);

    String login = request.getParameter("name");
    String psw = request.getParameter("psw");

    loginBean.setLogin(login);
    loginBean.setPassword(psw);

    String value = loginBean.login();

    System.out.println("SsoLogin result: " + value);
    request.getRequestDispatcher(value).forward(request, response);
}

loginBean から得られる値は、私のプロジェクトにある customeroverview.xhtml ファイルです。

動作は、サーバーが私に白いページを表示することです。ページのソースコードを表示すると、そうあるべきように見えます。同じ結果のリダイレクトも送信しようとしました。

サーブレットから直接 JSF アプリケーションにジャンプするのは最善の方法ではないかもしれませんが、明らかにうまくいきました。

この問題を解決するためのヒントはありますか?

4

1 に答える 1

0

JSFページはによって処理されることになっていますFacesServlet。実行するには、リクエストURLがのと一致する必要<url-pattern>がありFacesServletます。そうしないと、JSFコンポーネントはHTMLを生成せず、HTML要素の代わりに一連のJSFタグを含む-ブラウザへの-理解できない応答になってしまいます。

ログイン後に転送を実行するのではなく、リダイレクトを実行する必要があります。したがって、sendRedirect()の代わりに必ず使用する必要がありforward()ます。に渡すURLが何sendRedirect()であれ、のと一致する必要<url-pattern>がありFacesServletます。たとえば*.jsf、の場合、最終的には次のようになります。

response.sendRedirect(request.getContextPath() + "/home.jsf");
于 2013-01-15T11:20:03.150 に答える