在此jsf Web应用程序的某个时刻,系统会提示当前用户通过OAuth识别Twitter。
用户在Twitter上识别后,OAUth回调网址重定向到我的应用程序:
http://www.myJsfApp.com/successAuth.xhtml
但是当然没有会话ID,这个successAuth.xhtml没有连接到用户会话。该页面只是“原始”xhtml文件(包含其所有标签)而没有html。
如何将此回调网址链接回当前会话?
答案 0 :(得分:2)
但当然没有会话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必须与FacesServlet
的URL模式匹配才能调用它。因此,如果您已将其配置为侦听例如/faces/*
个网址,那么您显然应将网址更改为faces/successAuth.xhtml
。
HttpSession session = (HttpSession) externalContext.getSession();
String callbackURL = "http://www.myJsfApp.com/faces/successAuth.xhtml;jsessionid=" + session.getId();
// ...
或者,您也可以在FacesServlet
上映射*.xhtml
,这样您就不需要使用虚拟网址。