在java中的#之后获取url参数

时间:2010-11-10 13:21:08

标签: java facebook jsf

我正试图从facebook获取access_token。首先,我使用网址重定向到Facebook,如下所示

https://graph.facebook.com/oauth/authorize?type=user_agent&client_id=7316713919&redirect_uri=http://whomakescoffee.com:8080/app/welcome.jsf&scope=publish_stream

然后我有一个获取网址的监听器。

FacesContext fc = FacesContext.getCurrentInstance();
        HttpServletRequest request =
                (HttpServletRequest) fc.getExternalContext().getRequest();
String url = request.getRequestURL().toString();
                if (url.contains("access_token")) {
                    int indexOfEqualsSign = url.indexOf("=");
                    int indexOfAndSign = url.indexOf("&");
                    accessToken = url.substring(indexOfEqualsSign + 1, indexOfAndSign);
                    handleFacebookLogin(accessToken, fc);
                }

但它永远不会进入if ..

如何在#之后检索参数而不是在?之后的常规参数。

网址看起来像

http://benbiddington.wordpress.com/#access_token=
    116122545078207|
    2.1vGZASUSFMHeMVgQ_9P60Q__.3600.1272535200-500880518|
    QXlU1XfJR1mMagHLPtaMjJzFZp4

1 个答案:

答案 0 :(得分:4)

网址编码错误。它是XML-escaped而不是URL-encoded#是URL中的保留字符,表示永远不会发送回服务器端的客户端片段。

网址应如下所示:

https://graph.facebook.com/oauth/authorize?type=user_agent&client_id=7316713919&redirect_uri=http%3a%2f%2fwhomakescoffee.com%3a8080%2fapp%2fwelcome.jsf%26scope%3dpublish_stream

您可以使用java.net.URLEncoder