我正在运行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应用程序的最佳方式,但显然它有效。
有任何提示可以解决这个问题吗?
答案 0 :(得分:0)
JSF页面应该由FacesServlet
处理。要使其运行,请求网址必须与<url-pattern>
的{{1}}匹配。否则,JSF组件将不会生成HTML,并且您最终会得到一个浏览器无法理解的响应,其中包含一堆JSF标记而不是HTML元素。
您不希望在登录后执行转发,而是重定向。所以你绝对应该使用FacesServlet
代替sendRedirect()
。无论您传递给forward()
的网址是什么,都必须与sendRedirect()
的{{1}}匹配。如果它是例如<url-pattern>
,那么它最终应该如下所示:
FacesServlet