在此 jsf Web 应用程序的某个时刻,系统会提示当前用户通过 OAuth 识别 Twitter。
用户在 Twitter 上识别后,OAUth 回调 url 重定向到我的应用程序:
http://www.myJsfApp.com/successAuth.xhtml
但当然,如果没有会话 ID,这个 successAuth.xhtml 就不会连接到用户会话。该页面只是“原始”xhtml 文件(及其所有标签),没有 html。
如何使此回调 url 链接回当前会话?
在此 jsf Web 应用程序的某个时刻,系统会提示当前用户通过 OAuth 识别 Twitter。
用户在 Twitter 上识别后,OAUth 回调 url 重定向到我的应用程序:
http://www.myJsfApp.com/successAuth.xhtml
但当然,如果没有会话 ID,这个 successAuth.xhtml 就不会连接到用户会话。该页面只是“原始”xhtml 文件(及其所有标签),没有 html。
如何使此回调 url 链接回当前会话?
但当然,如果没有会话 ID,这个 successAuth.xhtml 就不会连接到用户会话。
如果您的 servletcontainer 支持 URL 重写(默认情况下,它们都支持),那么您可以将会话 ID 作为 URL 路径片段传递。
HttpSession session = (HttpSession) externalContext.getSession();
String callbackURL = "http://www.myJsfApp.com/successAuth.xhtml;jsessionid=" + session.getId();
// ...
该页面只是“原始”xhtml 文件(及其所有标签),没有 html。
当FacesServlet
没有被调用时,就会发生这种情况。请求 URL 必须与 的 URL 模式匹配FacesServlet
才能调用它。因此,如果您已将其配置为侦听例如/faces/*
URL,那么您显然应该将 URL 更改为faces/successAuth.xhtml
.
HttpSession session = (HttpSession) externalContext.getSession();
String callbackURL = "http://www.myJsfApp.com/faces/successAuth.xhtml;jsessionid=" + session.getId();
// ...
或者,您也可以只映射FacesServlet
on *.xhtml
,这样您就不需要摆弄虚拟 URL。