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



我有一个JSF/IceFaces3应用程序正在运行。通过SSO登录到该应用程序后,该应用程序应该在内部网环境中运行。老板让我给他提供一个链接,他可以这样打电话:

http://companieserver/FancyApplcation/indexsso?name=【用户名】,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应用程序的最佳方式,但显然它是有效的。

有解决这个问题的提示吗?

JSF页面应该由FacesServlet处理。为了让它运行,请求URL必须匹配FacesServlet<url-pattern>。否则JSF组件将不会生成HTML,并且您最终会得到一个——对浏览器来说——难以理解的响应,其中包含一堆JSF标记而不是HTML元素。

您不希望在登录后执行转发,而是重定向。所以你一定要用sendRedirect()而不是forward()。无论您传递给sendRedirect()的URL是什么,它都必须与FacesServlet<url-pattern>匹配。例如,如果它是*.jsf,那么它最终应该是这样的:

response.sendRedirect(request.getContextPath() + "/home.jsf");

相关内容

  • 没有找到相关文章

最新更新