通过SSO登录JSF / IceFaces3应用程序

时间:2013-01-15 10:17:50

标签: jsf servlets icefaces

我正在运行JSF / IceFaces3应用程序。此应用程序应在通过SSO登录后在Intranet环境中运行。 老板告诉我给他提供一个他可以称之为的链接:

的http:// companieserver / FancyApplcation / indexsso名称= [用户名]&安培; PSW = [的userPassword]

作为新手,我创建了一个servlet并在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 Servlet我想重定向到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文件。

行为是服务器向我显示白页。当我查看页面的源代码时,它看起来应该是。 我也尝试发送一个重定向相同的结果。

也许这不是从servlet直接跳转到JSF应用程序的最佳方式,但显然它有效。

有任何提示可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

JSF页面应该由FacesServlet处理。要使其运行,请求网址必须与<url-pattern>的{​​{1}}匹配。否则,JSF组件将不会生成HTML,并且您最终会得到一个浏览器无法理解的响应,其中包含一堆JSF标记而不是HTML元素。

您不希望在登录后执行转发,而是重定向。所以你绝对应该使用FacesServlet代替sendRedirect()。无论您传递给forward()的网址是什么,都必须与sendRedirect()的{​​{1}}匹配。如果它是例如<url-pattern>,那么它最终应该如下所示:

FacesServlet