package com.tencent.weibo.oauthv1; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import org.apache.http.NameValuePair; import org.apache.http.message.BasicNameValuePair; import com.tencent.weibo.beans.OAuth; import com.tencent.weibo.constants.OAuthConstants; /** * OAuth version 1 认证参数实体类 */ public class OAuthV1 extends OAuth implements Serializable{ private static final long serialVersionUID = 4695293221245171919L; private String oauthCallback = "null";// 认证成功后浏览器会被重定向到这个url中 private String oauthConsumerKey = "";// AppKey(client credentials) private String oauthConsumerSecret = "";// AppSecret private String oauthSignatureMethod = "HMAC-SHA1";// 签名方法,暂只支持HMAC-SHA1 private String oauthToken = ""; // Request Token 或 Access Token private String oauthTimestamp = "";// 时间戳 private String oauthNonce = "";// 单次值,随机字符串,防止重放攻击 private String oauthTokenSecret = ""; // Request Token 或 Access Token 对应的签名密钥 private String oauthVerifier = ""; // 验证码 // private static Log log = LogFactory.getLog(OAuthV1.class);// 日志输出 public OAuthV1() { super(); this.oauthVersion=OAuthConstants.OAUTH_VERSION_1 ; } /** * @param oauthCallback 认证成功后浏览器会被重定向到这个地址 */ public OAuthV1(String oauthCallback) { super(); this.oauthCallback = oauthCallback; this.oauthVersion=OAuthConstants.OAUTH_VERSION_1 ; } /** * * @param oauthConsumerKey 应用申请到的APP KEY * @param oauthConsumerSecret 应用申请到的APP SECRET * @param oauthCallback 认证成功后浏览器会被重定向到这个地址 */ public OAuthV1(String oauthConsumerKey, String oauthConsumerSecret, String oauthCallback) { super(); this.oauthConsumerKey = oauthConsumerKey; this.oauthConsumerSecret = oauthConsumerSecret; this.oauthCallback = oauthCallback; this.oauthVersion=OAuthConstants.OAUTH_VERSION_1 ; } /** * 生成 timestamp. * * @return timestamp */ private String generateTimeStamp() { return String.valueOf(System.currentTimeMillis() / 1000); } /** * 简单生成四次 15103344 到 9999999 之间的数字串,并将他们连接起来作为 Oauth_Nonce 值 * * @return Oauth_Nonce */ private String generateNonce() { String nonce = ""; for (int i = 0; i < 4; i++) { nonce=String.valueOf(random.nextInt(100000000))+nonce; for(;nonce.length()<(i+1)*8;nonce="0"+nonce); } return nonce; } public List<NameValuePair> getParamsList() { List<NameValuePair> paramsList = new ArrayList<NameValuePair>(); oauthTimestamp = this.generateTimeStamp(); oauthNonce = this.generateNonce(); paramsList.add(new BasicNameValuePair("oauth_consumer_key",oauthConsumerKey)); paramsList.add(new BasicNameValuePair("oauth_signature_method",oauthSignatureMethod)); paramsList.add(new BasicNameValuePair("oauth_timestamp", oauthTimestamp)); paramsList.add(new BasicNameValuePair("oauth_nonce", oauthNonce)); paramsList.add(new BasicNameValuePair("oauth_callback", oauthCallback)); paramsList.add(new BasicNameValuePair("oauth_version", oauthVersion)); return paramsList; } public List<NameValuePair> getAccessParams() { List<NameValuePair> paramsList = this.getTokenParamsList(); paramsList.add(new BasicNameValuePair("oauth_verifier", oauthVerifier)); return paramsList; } public List<NameValuePair> getTokenParamsList() { List<NameValuePair> paramsList = new ArrayList<NameValuePair>(); oauthTimestamp = this.generateTimeStamp(); oauthNonce = this.generateNonce(); paramsList.add(new BasicNameValuePair("oauth_consumer_key",oauthConsumerKey)); paramsList.add(new BasicNameValuePair("oauth_signature_method",oauthSignatureMethod)); paramsList.add(new BasicNameValuePair("oauth_timestamp", oauthTimestamp)); paramsList.add(new BasicNameValuePair("oauth_nonce", oauthNonce)); paramsList.add(new BasicNameValuePair("oauth_token", oauthToken)); paramsList.add(new BasicNameValuePair("oauth_version", oauthVersion)); return paramsList; } /**应用的APP KEY*/ public String getOauthConsumerKey() { return oauthConsumerKey; } /**应用的APP KEY*/ public void setOauthConsumerKey(String oauthConsumerKey) { this.oauthConsumerKey = oauthConsumerKey; } /**使用的签名方法,暂只支持HMAC-SHA1*/ public String getOauthSignatureMethod() { return oauthSignatureMethod; } /**使用的签名方法,暂只支持HMAC-SHA1*/ public void setOauthSignatureMethod(String oauthSignatureMethod) { this.oauthSignatureMethod = oauthSignatureMethod; } /**应用申请到的APP SECRET*/ public String getOauthConsumerSecret() { return oauthConsumerSecret; } /**应用申请到的APP SECRET*/ public void setOauthConsumerSecret(String oauthConsumerSecret) { this.oauthConsumerSecret = oauthConsumerSecret; } /**存放requestToken或accessToken*/ public String getOauthToken() { return oauthToken; } /**存放requestToken或accessToken*/ public void setOauthToken(String oauthToken) { this.oauthToken = oauthToken; } /**时间戳*/ public String getOauthTimestamp() { return oauthTimestamp; } /**时间戳,通过{@link #generateTimeStamp()}可得到当前时间戳*/ public void setOauthTimestamp(String oauthTimestamp) { this.oauthTimestamp = oauthTimestamp; } /**单次值,随机字符串,作重复检验*/ public String getOauthNonce() { return oauthNonce; } /**单次值,随机字符串,作重复检验,通过{@link #generateNonce()}可得到随机值*/ public void setOauthNonce(String oauthNonce) { this.oauthNonce = oauthNonce; } /**重定向地址*/ public String getOauthCallback() { return oauthCallback; } /**重定向地址*/ public void setOauthCallback(String oauthCallback) { this.oauthCallback = oauthCallback; } /**存放requestSecret或accessSecret*/ public String getOauthTokenSecret() { return oauthTokenSecret; } /**存放requestSecret或accessSecret*/ public void setOauthTokenSecret(String oauthTokenSecret) { this.oauthTokenSecret = oauthTokenSecret; } /**授权码*/ public String getOauthVerifier() { return oauthVerifier; } /**授权码*/ public void setOauthVerifier(String oauthVerifier) { this.oauthVerifier = oauthVerifier; } }