JOAuth,一个基于java的OAuth 1(最终版)和OAuth 2(草案10)库。我如何使用它?
我在这里看到了太多关于OAuth的问题,以及如何使用OAuth协议连接到Facebook Graph API或Twitter API 我已经发现了(从谷歌代码),我想知道如何使用它?JOAuth还提供了哪些其他功能?它与其他java oauth库配合得好吗?鉴于我已经编写了JOAuth,我认为应该这样回答这个问题。我找不到将此问题设置为社区wiki的选项:( 注意我不是来讨论的。有很多专门的网站 JOAuth有一个很棒的特性,它有一个控制器JOAuth,一个基于java的OAuth 1(最终版)和OAuth 2(草案10)库。我如何使用它?,java,oauth,joauth,Java,Oauth,Joauth,我在这里看到了太多关于OAuth的问题,以及如何使用OAuth协议连接到Facebook Graph API或Twitter API 我已经发现了(从谷歌代码),我想知道如何使用它?JOAuth还提供了哪些其他功能?它与其他java oauth库配合得好吗?鉴于我已经编写了JOAuth,我认为应该这样回答这个问题。我找不到将此问题设置为社区wiki的选项:( 注意我不是来讨论的。有很多专门的网站 JOAuth有一个很棒的特性,它有一个控制器OAuthServlet,用于管理来自服务提供商的HTT
OAuthServlet
,用于管理来自服务提供商的HTTP重定向响应。
要将OAuthServlet
配置到web应用程序,只需在web.xml
中将其声明为
,如下所示:
<servlet>
<description>An OAuth Servlet Controller</description>
<display-name>OAuthServlet</display-name>
<servlet-name>OAuthServlet</servlet-name>
<servlet-class>com.neurologic.oauth.servlet.OAuthServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/oauth-config.xml</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
您会注意到,每个
元素都有一个版本
属性(这是控制器需要知道要使用哪个oauth流的强制属性)。这些只有有两个可能的值(OAuth1的1
和OAuth2的2
)。
对于OAuth 2,
元素不像版本1中的对应元素那样具有requestTokenUrl
属性
OAuth服务是负责OAuth处理的服务。控制器通过execute()
方法调用每个OAuthService
。
有两种类型的OAuthService
:
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import net.oauth.enums.GrantType;
import net.oauth.exception.OAuthException;
import net.oauth.parameters.OAuth2Parameters;
import com.neurologic.oauth.service.impl.OAuth2Service;
import com.neurologic.oauth.util.Globals;
/**
* @author The Elite Gentleman
* @since 05 December 2010
*
*/
public class FacebookOAuthService extends OAuth2Service {
private static final String REDIRECT_URL = "http://localhost:8080/Music4Point0/oauth/oauth_redirect";
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth2Service#processReceivedAuthorization(javax.servlet.http.HttpServletRequest, java.lang.String, java.util.Map)
*/
@Override
protected String processReceivedAuthorization(HttpServletRequest request, String code, Map<String, String> additionalParameters) throws OAuthException {
// TODO Auto-generated method stub
OAuth2Parameters parameters = new OAuth2Parameters();
parameters.setCode(code);
parameters.setRedirectUri(REDIRECT_URL);
Map<String, String> responseMap = getConsumer().requestAcessToken(GrantType.AUTHORIZATION_CODE, parameters, null, (String[])null);
if (responseMap == null) {
//This usually should never been thrown, but we just do anyway....
throw new OAuthException("No OAuth response retrieved.");
}
if (responseMap.containsKey("error")) {
throwOAuthErrorException(responseMap);
}
if (responseMap.containsKey(OAuth2Parameters.ACCESS_TOKEN)) {
String accessToken = responseMap.remove(OAuth2Parameters.ACCESS_TOKEN);
request.getSession().setAttribute(Globals.SESSION_OAUTH2_ACCESS_TOKEN, accessToken);
processAdditionalReceivedAccessTokenParameters(request, responseMap);
}
return null;
}
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth2Service#processAdditionalReceivedAccessTokenParameters(javax.servlet.http.HttpServletRequest, java.util.Map)
*/
@Override
protected void processAdditionalReceivedAccessTokenParameters(HttpServletRequest request, Map<String, String> additionalParameters) throws OAuthException {
// TODO Auto-generated method stub
}
}
import javax.servlet.http.HttpServletRequest;
import net.oauth.exception.OAuthException;
import net.oauth.signature.impl.OAuthHmacSha1Signature;
import net.oauth.token.AccessToken;
import net.oauth.token.AuthorizedToken;
import net.oauth.token.RequestToken;
import com.neurologic.oauth.service.impl.OAuth1Service;
/**
* @author The Elite Gentleman
* @since 05 December 2010
*
*/
public class TwitterOAuthService extends OAuth1Service {
public static final String REQUEST_TOKEN_SESSION = "TWITTER_REQUEST_TOKEN_SESSION";
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth1Service#processReceivedAuthorizedToken(javax.servlet.http.HttpServletRequest, net.oauth.token.AuthorizedToken)
*/
@Override
protected AccessToken processReceivedAuthorizedToken(HttpServletRequest request, AuthorizedToken authorizedToken) throws OAuthException {
// TODO Auto-generated method stub
String requestTokenSecret = null;
RequestToken requestToken = (RequestToken) request.getSession().getAttribute(REQUEST_TOKEN_SESSION);
if (requestToken != null) {
requestTokenSecret = requestToken.getTokenSecret();
}
return getConsumer().requestAccessToken(null, authorizedToken, requestTokenSecret, new OAuthHmacSha1Signature());
}
}
com.neurologic.oauth.service.impl.OAuth1Service
com.neurologic.oauth.service.impl.OAuth2Service
OAuth2Service
的服务。这同样适用于OAuth 1。否则将引发异常
每个
标记必须具有名称
属性,该属性与
名称属性匹配(区分大小写)
已实现OAuth1Service
和OAuth2Service
execute(HttpServletRequest,HttpServletResponse)
以最好地处理OAuth授权协议的流,但如果不满意,可以覆盖它
com.neurologic.music4point0.oauth.FacebookOAuthService
的一个示例:
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import net.oauth.enums.GrantType;
import net.oauth.exception.OAuthException;
import net.oauth.parameters.OAuth2Parameters;
import com.neurologic.oauth.service.impl.OAuth2Service;
import com.neurologic.oauth.util.Globals;
/**
* @author The Elite Gentleman
* @since 05 December 2010
*
*/
public class FacebookOAuthService extends OAuth2Service {
private static final String REDIRECT_URL = "http://localhost:8080/Music4Point0/oauth/oauth_redirect";
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth2Service#processReceivedAuthorization(javax.servlet.http.HttpServletRequest, java.lang.String, java.util.Map)
*/
@Override
protected String processReceivedAuthorization(HttpServletRequest request, String code, Map<String, String> additionalParameters) throws OAuthException {
// TODO Auto-generated method stub
OAuth2Parameters parameters = new OAuth2Parameters();
parameters.setCode(code);
parameters.setRedirectUri(REDIRECT_URL);
Map<String, String> responseMap = getConsumer().requestAcessToken(GrantType.AUTHORIZATION_CODE, parameters, null, (String[])null);
if (responseMap == null) {
//This usually should never been thrown, but we just do anyway....
throw new OAuthException("No OAuth response retrieved.");
}
if (responseMap.containsKey("error")) {
throwOAuthErrorException(responseMap);
}
if (responseMap.containsKey(OAuth2Parameters.ACCESS_TOKEN)) {
String accessToken = responseMap.remove(OAuth2Parameters.ACCESS_TOKEN);
request.getSession().setAttribute(Globals.SESSION_OAUTH2_ACCESS_TOKEN, accessToken);
processAdditionalReceivedAccessTokenParameters(request, responseMap);
}
return null;
}
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth2Service#processAdditionalReceivedAccessTokenParameters(javax.servlet.http.HttpServletRequest, java.util.Map)
*/
@Override
protected void processAdditionalReceivedAccessTokenParameters(HttpServletRequest request, Map<String, String> additionalParameters) throws OAuthException {
// TODO Auto-generated method stub
}
}
import javax.servlet.http.HttpServletRequest;
import net.oauth.exception.OAuthException;
import net.oauth.signature.impl.OAuthHmacSha1Signature;
import net.oauth.token.AccessToken;
import net.oauth.token.AuthorizedToken;
import net.oauth.token.RequestToken;
import com.neurologic.oauth.service.impl.OAuth1Service;
/**
* @author The Elite Gentleman
* @since 05 December 2010
*
*/
public class TwitterOAuthService extends OAuth1Service {
public static final String REQUEST_TOKEN_SESSION = "TWITTER_REQUEST_TOKEN_SESSION";
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth1Service#processReceivedAuthorizedToken(javax.servlet.http.HttpServletRequest, net.oauth.token.AuthorizedToken)
*/
@Override
protected AccessToken processReceivedAuthorizedToken(HttpServletRequest request, AuthorizedToken authorizedToken) throws OAuthException {
// TODO Auto-generated method stub
String requestTokenSecret = null;
RequestToken requestToken = (RequestToken) request.getSession().getAttribute(REQUEST_TOKEN_SESSION);
if (requestToken != null) {
requestTokenSecret = requestToken.getTokenSecret();
}
return getConsumer().requestAccessToken(null, authorizedToken, requestTokenSecret, new OAuthHmacSha1Signature());
}
}
我希望这个小例子能帮助那些热衷于使OAuth成为其发展中一个有价值的经验的人
很抱歉,我找不到社区wiki
复选框。请在有时间时访问我的博客(几乎没有任何内容)
再见:-)
PS这是TwitterOAuthService的一个实现:
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import net.oauth.enums.GrantType;
import net.oauth.exception.OAuthException;
import net.oauth.parameters.OAuth2Parameters;
import com.neurologic.oauth.service.impl.OAuth2Service;
import com.neurologic.oauth.util.Globals;
/**
* @author The Elite Gentleman
* @since 05 December 2010
*
*/
public class FacebookOAuthService extends OAuth2Service {
private static final String REDIRECT_URL = "http://localhost:8080/Music4Point0/oauth/oauth_redirect";
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth2Service#processReceivedAuthorization(javax.servlet.http.HttpServletRequest, java.lang.String, java.util.Map)
*/
@Override
protected String processReceivedAuthorization(HttpServletRequest request, String code, Map<String, String> additionalParameters) throws OAuthException {
// TODO Auto-generated method stub
OAuth2Parameters parameters = new OAuth2Parameters();
parameters.setCode(code);
parameters.setRedirectUri(REDIRECT_URL);
Map<String, String> responseMap = getConsumer().requestAcessToken(GrantType.AUTHORIZATION_CODE, parameters, null, (String[])null);
if (responseMap == null) {
//This usually should never been thrown, but we just do anyway....
throw new OAuthException("No OAuth response retrieved.");
}
if (responseMap.containsKey("error")) {
throwOAuthErrorException(responseMap);
}
if (responseMap.containsKey(OAuth2Parameters.ACCESS_TOKEN)) {
String accessToken = responseMap.remove(OAuth2Parameters.ACCESS_TOKEN);
request.getSession().setAttribute(Globals.SESSION_OAUTH2_ACCESS_TOKEN, accessToken);
processAdditionalReceivedAccessTokenParameters(request, responseMap);
}
return null;
}
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth2Service#processAdditionalReceivedAccessTokenParameters(javax.servlet.http.HttpServletRequest, java.util.Map)
*/
@Override
protected void processAdditionalReceivedAccessTokenParameters(HttpServletRequest request, Map<String, String> additionalParameters) throws OAuthException {
// TODO Auto-generated method stub
}
}
import javax.servlet.http.HttpServletRequest;
import net.oauth.exception.OAuthException;
import net.oauth.signature.impl.OAuthHmacSha1Signature;
import net.oauth.token.AccessToken;
import net.oauth.token.AuthorizedToken;
import net.oauth.token.RequestToken;
import com.neurologic.oauth.service.impl.OAuth1Service;
/**
* @author The Elite Gentleman
* @since 05 December 2010
*
*/
public class TwitterOAuthService extends OAuth1Service {
public static final String REQUEST_TOKEN_SESSION = "TWITTER_REQUEST_TOKEN_SESSION";
/* (non-Javadoc)
* @see com.neurologic.oauth.service.impl.OAuth1Service#processReceivedAuthorizedToken(javax.servlet.http.HttpServletRequest, net.oauth.token.AuthorizedToken)
*/
@Override
protected AccessToken processReceivedAuthorizedToken(HttpServletRequest request, AuthorizedToken authorizedToken) throws OAuthException {
// TODO Auto-generated method stub
String requestTokenSecret = null;
RequestToken requestToken = (RequestToken) request.getSession().getAttribute(REQUEST_TOKEN_SESSION);
if (requestToken != null) {
requestTokenSecret = requestToken.getTokenSecret();
}
return getConsumer().requestAccessToken(null, authorizedToken, requestTokenSecret, new OAuthHmacSha1Signature());
}
}
其他资源
JOAuth
。我已经相应地回复了你的帖子。如果出现其他问题,请告诉我。PS,你是怎么听说JOAuth的?