最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)  微博登錄、微信登錄、qq登錄實現(xiàn)代碼

 更新時間:2016年10月13日 09:21:06   投稿:lqh  
這篇文章主要介紹了java實現(xiàn) 微博登錄、微信登錄、qq登錄實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下

微信,微博,QQ,這是現(xiàn)在目前用的最多的手機 APP,我們做產(chǎn)品哪能不跟他們不沾邊,對于登錄,我想誰也不想要多少個帳號密碼,根本記不??!

為了增加用戶體驗,用戶能夠快速的注冊登錄,第三方賬號進行登錄注冊的的需求也就由此而誕生

1、微信

 1) 微信登錄也是最坑人的,需要花300大洋成為開發(fā)者賬戶,沒辦法誰讓微信用戶群體大呢所以也就只好認了;然后登錄網(wǎng)站后臺需要創(chuàng)建網(wǎng)站應(yīng)用,填寫授權(quán)回調(diào)域(登錄網(wǎng)站的域名)只填寫域名即可

申請地址: https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN

 2)查看微信提供的接口,寫java代碼

 public void wx() {
 try {
  response.sendRedirect("https://open.weixin.qq.com/connect/qrconnect?appid="
   + ShareLoginDict.WEIXINKEY.getState()
   + "&redirect_uri="
   + URLEncoder.encode(ShareLoginDict.WEIXINURL.getState()) 
   + "&response_type=code&scope=snsapi_login&state=66666#wechat_redirect");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }

@Override
 public Result userwx(String return_code) {
 Result result = new Result();
 Map<String, Object> token = (Map<String, Object>) WeiXinAPI
  .getToken(return_code);
 if (token != null && token.get("access_token") != null) {
  Map<String, Object> user = (Map<String, Object>) WeiXinAPI
   .getWxUser(token.get("access_token").toString(),
    token.get("openid").toString());
  if (user != null) {
  result.addModel("openid", user.get("openid"));
  result.addModel("nickname", user.get("nickname"));
  result.addModel("headimgurl", user.get("headimgurl"));
  result.addModel("data", "data_success");
  }else{
  result.addModel("data", "data_null");
  }
 }else{
  result.addModel("data", "data_null");
 }
 return result;
 }

當(dāng)用戶通過微信登錄時,調(diào)用微信接口獲取用戶接口返回微信端的openid,昵稱,頭像;然后將此信息存入到瀏覽器的cookie中,當(dāng)用戶瀏覽其他信息時,辨別如果是用戶是用微信登錄的,攔截器直接從cookie中獲取用戶的信息顯示昵稱和頭像,并同時判斷該openid是否和數(shù)據(jù)庫中用戶做綁定,如果沒有綁定提示用戶注冊。

2、qq登錄

 1)qq互聯(lián)創(chuàng)建應(yīng)用

接入QQ登錄前,網(wǎng)站需首先進行申請,獲得對應(yīng)的appid與appkey,以保證后續(xù)流程中可正確對網(wǎng)站與用戶進行驗證與授權(quán)。

申請appid和appkey的用途

 appid :應(yīng)用的唯一標識。在OAuth2.0認證過程中,appid的值即為oauth_consumer_key的值。

appkey:appid對應(yīng)的密鑰,訪問用戶資源時用來驗證應(yīng)用的合法性。在OAuth2.0認證過程中,appkey的值即為oauth_consumer_secret的值。

申請地址: http://connect.qq.com/intro/login/

 2)查看QQ提供的接口,寫java代碼

public void qq() {
 try {
  response.sendRedirect("https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id="
   + ShareLoginDict.QQKEY.getState()
   + "&redirect_uri="
   + ShareLoginDict.QQURL.getState() + "&scope=get_user_info");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }

@Override
 public Result userqq(String return_code) {
 Result result = new Result();
 Map<String, Object> token = (Map<String, Object>) QQAPI
  .getToken(return_code);
 if (token != null && token.get("access_token") != null) {
  Map<String, Object> tokenme = (Map<String, Object>) QQAPI
   .getTokenMeOpenId(token.get("access_token").toString());
  if (tokenme != null && tokenme.get("openid") != null) {
  Map<String, Object> user = (Map<String, Object>) QQAPI
   .getQqUser(token.get("access_token").toString(),
    tokenme.get("openid").toString());
  if (user != null) {
   result.addModel("openid", tokenme.get("openid"));
   result.addModel("nickname", user.get("nickname"));
   result.addModel("figureurl", user.get("figureurl"));
   result.addModel("data", "data_success");
  }else{
   result.addModel("data", "data_null");
  }
  }else{
  result.addModel("data", "data_null");
  }

 }else{
  result.addModel("data", "data_null");
 }
 return result;
 } 

當(dāng)用戶通過QQ登錄時,調(diào)用QQ接口獲取用戶接口返回QQ端的openid,昵稱,頭像;然后將此信息存入到瀏覽器的cookie中,當(dāng)用戶瀏覽其他信息時,辨別如果是用戶是用微信登錄的,攔截器直接從cookie中獲取用戶的信息顯示昵稱和頭像,并同時判斷該openid是否和數(shù)據(jù)庫中用戶做綁定,如果沒有綁定提示用戶注冊。

3 微博登錄

 1)微博創(chuàng)建應(yīng)用

  申請地址:http://open.weibo.com/authentication

 2)查看微博提供的接口,寫java代碼

public void wb() {
 try {
  response.sendRedirect("https://api.weibo.com/oauth2/authorize?client_id="
   + ShareLoginDict.WEIBOKEY.getState()
   + "&redirect_uri="
   + ShareLoginDict.WEIBOURL.getState()
   + "&response_type=code");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }

@Override
 public Result userwb(String return_url, String return_code) {
 Result result = new Result();
 Map<String, Object> token = (Map<String, Object>) WeiBoAPI.getToken(
  return_url, return_code);
 if (token != null && token.get("access_token") != null) {
  Map<String, Object> user = (Map<String, Object>) WeiBoAPI
   .getWbUser(token.get("access_token").toString(),
    token.get("uid").toString());
  if (user != null) {
  result.addModel("name", user.get("screen_name"));
  result.addModel("pic", user.get("avatar_large"));
  result.addModel("idstr", user.get("idstr"));
  result.addModel("data", "data_success");
  }else{
  result.addModel("data", "data_null");
  }
 }else{
  result.addModel("data", "data_null");
 }
 return result;
 }

當(dāng)用戶通過微博登錄時,調(diào)用微博接口獲取用戶接口返回微博端的idstr,昵稱,頭像;然后將此信息存入到瀏覽器的cookie中,當(dāng)用戶瀏覽其他信息時,辨別如果是用戶是用微信登錄的,攔截器直接從cookie中獲取用戶的信息顯示昵稱和頭像,并同時判斷該openid是否和數(shù)據(jù)庫中用戶做綁定,如果沒有綁定提示用戶注冊。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • dom4j操作xml的demo(分享)

    dom4j操作xml的demo(分享)

    下面小編就為大家?guī)硪黄猟om4j操作xml的demo(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • Java使用POI導(dǎo)出Excel(一):單sheet

    Java使用POI導(dǎo)出Excel(一):單sheet

    這篇文章介紹了Java使用POI導(dǎo)出Excel的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-10-10
  • java?環(huán)境配置(2023年詳細教程)

    java?環(huán)境配置(2023年詳細教程)

    這篇文章首先為了完善我的知識體系,今后一些軟件的安裝教程也可能會用到想寫一個更加詳細的,因為這并不僅僅是寫給?IT?行業(yè)的,其它行業(yè)可能也需要配置java環(huán)境
    2023-06-06
  • javaweb用戶注銷后點擊瀏覽器返回刷新頁面重復(fù)登錄問題的解決方法

    javaweb用戶注銷后點擊瀏覽器返回刷新頁面重復(fù)登錄問題的解決方法

    這篇文章主要為大家詳細介紹了javaweb用戶注銷后點擊瀏覽器返回刷新頁面重復(fù)登錄問題的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 如何解決java.util.concurrent.CancellationException問題

    如何解決java.util.concurrent.CancellationException問題

    這篇文章主要介紹了如何解決java.util.concurrent.CancellationException問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • Spring配置文件的拆分和整合過程分析

    Spring配置文件的拆分和整合過程分析

    在實際應(yīng)用里,隨著應(yīng)用規(guī)模的增加,系統(tǒng)中 Bean 數(shù)量也大量增加,導(dǎo)致配置文件非常龐大。為了避免這種情況的產(chǎn)生,提高配置文件的可讀性與可維護性,可以將Spring 配置文件分解成多個配置文件,感興趣的朋友跟隨小編一起看看吧
    2022-10-10
  • Spring boot文件路徑映射配置代碼實例

    Spring boot文件路徑映射配置代碼實例

    這篇文章主要介紹了Spring boot文件路徑映射配置代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • SpringMVC?@RequestMapping注解詳解

    SpringMVC?@RequestMapping注解詳解

    本文主要介紹了SpringMVC?@RequestMapping注解詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Java中字符串中連續(xù)相同字符去重方法

    Java中字符串中連續(xù)相同字符去重方法

    今天小編就為大家分享一篇Java中字符串中連續(xù)相同字符去重方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Java 按行讀取文件按行寫入文件并以空格分割字符串的方法

    Java 按行讀取文件按行寫入文件并以空格分割字符串的方法

    今天小編就為大家分享一篇Java 按行讀取文件按行寫入文件并以空格分割字符串的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07

最新評論

伊宁市| 霍林郭勒市| 阜平县| 晋城| 博湖县| 彝良县| 贵定县| 上饶市| 沙雅县| 富宁县| 上犹县| 大名县| 宁都县| 加查县| 鄢陵县| 石屏县| 界首市| 乐山市| 乌鲁木齐县| 万山特区| 大丰市| 晋宁县| 元阳县| 依安县| 盐源县| 台湾省| 石城县| 桐柏县| 从化市| 永平县| 黔西县| 山西省| 阿拉善盟| 尉氏县| 奉新县| 岑溪市| 水富县| 开江县| 莒南县| 江口县| 武城县|