繁体   English   中英

JSF2会话问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM