[英]JSF2 Session issue
在这里,我正在LoginLogin.java中检查一个Sessionscoped bean,我有此代码
从MyPage.xhtml
调用
public String Method1(){
HttpSession secondSession = (HttpSession) FacesContext.
getCurrentInstance().
getExternalContext().
getSession(false);
System.out.println(secondSession.getId());
}
结果即将到来9B4CB2748A440FEF1B2B4A7AEF401BFF
在同一个bean中,我有另一个方法,该方法是从MyAnotherPage.xhtml
另一个JSF页面调用中调用的
public String Method2(){
HttpSession secondSession = (HttpSession) FacesContext.
getCurrentInstance().
getExternalContext().
getSession(false);
System.out.println(secondSession.getId());
}
结果即将到来3F9F2F1CF9C9A0A56B44AB5DB04ABF12
看起来它创建了两个不同的会话ID,这意味着两个不同的会话。现在的问题是,如果在第一种方法中我在会话中添加了任何属性,我将无法在第二种方法中获得该属性。怎么了?为什么对不同的请求使用不同的会话?
注意:-用户成功从Facebook登录后的第二种方法调用,因此添加Twitter APPS的是CallbackOurl。
http://127.0.0.1:8080/mywebapp/login/MyAnotherPage.xhtml
我从这个xhtml页面调用这样的方法
<f:event listener="#{TwitterManagedBean.redirectTwitterLogin2}" type="preRenderView" />
我如何设置属性
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
HttpServletResponse response = (HttpServletResponse) FacesContext
.getCurrentInstance().getExternalContext().getResponse();
try {
Twitter twitter = new TwitterFactory().getInstance();
RequestToken requestToken;
request.getSession().setAttribute("twitter", twitter);
twitter.setOAuthConsumer("***********","***************"
);
requestToken = twitter
.getOAuthRequestToken("http://127.0.0.1:8080/3c/login/TwitterLogin.xhtml");
String authURL = requestToken.getAuthenticationURL();
request.getSession().setAttribute("requestToken", requestToken);
response.sendRedirect(authURL);
} catch (TwitterException twitterException) {
twitterException.printStackTrace();
}
}
像这样返回
public void fetchUserInfo( )
throws TwitterException {
HttpServletRequest request = (HttpServletRequest) FacesContext
.getCurrentInstance().getExternalContext().getRequest();
Map<String, Object> requestMap = FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
Twitter value = (Twitter) requestMap.get("twitter");
Twitter twitter = (Twitter) request.getSession()
.getAttribute("twitter");//Here Null
RequestToken requestToken = (RequestToken) request.getSession()
.getAttribute("requestToken");//Here Null
accessToken = twitter.getOAuthAccessToken(requestToken, verifier);
request.getSession().removeAttribute("requestToken");
userId = accessToken.getUserId();
User user = twitter.showUser(userId);
avatarUrl = user.getProfileImageURL().toString();
screenName = user.getScreenName();
}
您可以尝试一下,也许可以解决您的问题。 这对我有用。
FacesContext facesContext = FacesContext.getCurrentInstance();
HttpSession httpSession = (HttpSession) facesContext.getExternalContext().getSession(true);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.