百度第三方登录

说起这个第三方登录,我想大家实在是再熟悉不过了。要做微信工作号的人用秀米,用135编辑器都会用到第三方登录;要玩游戏的同学,大大小小的游戏哪个不给设置个第三方登录?再说到平常的app,第三方登录就更稀松平常了,前几天我打开一个美颜相机都可以用第三方登录,如果不第三方登录的话就必须注册一个账号,拍个照还注册账号是不是有点过分,于是我果断选择了第三方登录,选择完之后啊,还得注册,这个问题我们以后再讨论,为什么会出现这样的情况,今天呢,我们就来一块看看百度的第三方登录的具体实现步骤。

(因为文章有一些是从网上直接拿来用的,所以在此附上原文链接:https://blog.csdn.net/Luego/article/details/61414104)

先做一下实现功能前的准备工作:

  1. eclipse软件、
  2. Java配置环境、
  3. tomcat、
  4. 域名
  5. 服务器

这些都准备好之后,那就开始进行下边的步骤:

       1.进入百度开发者中心

2.如果有账号就可以直接登录,如果没有就注册一个,手机号就可以注册.

3.登录成功,右上方就可以出现一个,申请记录

4. 点击进去,出现下面这个页面

5.然后再点击进入百度云官网可能还会让你登录,那就再次登录,出现这个页面

6.输入应该输入的信息,之后会提示你激活成功,接下来再点开百度云开发者中心页面,点击应用管理

7.创建工程创建成功后会出现这样的页面API KEY 一定要记好,在接下来的操作中会用到

8.百度给了你一个密钥,接下来进行第三方登录的编程 ,首先在安全设置里面有一个添加回调页面的框,就可以写上你本人项目上的回调页的路径,回调页便是你执行登录成功的跳转页

9.还有就是在这个里面有API和一些请求回调的路径还有教程,其实细细看自己就能搞懂

做完了这些工作,接下来就是如何代码实现第三方登录的这个功能了。整个过程共用到三次回调,又叫三次握手,

在第一次握手时,第一次得到一个code值(点击“百度登录”):

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<script type="text/javascript">
        function bdlogin(){
            location.href="https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=AsWBk4bl3OZfe7ZlCV4tzGID&redirect_uri=http://localhost:8080/baidu/LoginServlet&display=popup";
        }
</script>
<body>
<input type="button" value="百度登录" οnclick="bdlogin()">
</body>
</html>

String code = req.getParameter("code");

第二次是拿着这个code值与百度再次交互, 用httpclient 将code传递给百度,百度会返回一组Json数据,其中包含access_token

String redirect_uri = "http://localhost:8080/baidu/LoginServlet";
        String client_secret = "26xfRq4fRk6eAY9wLQ0eoXKPoF9tTytG";
        String client_id = "AsWBk4bl3OZfe7ZlCV4tzGID";
        String url1 = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code="+code+"&client_id="+client_id+"&client_secret="+client_secret+"&redirect_uri="+redirect_uri+"";
        
        String content1 = "";
        
        try {
            //创建一个HttpClient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //创建一个Get请求
            HttpGet getReq = new HttpGet(url1);
            
            getReq.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8    ");
            getReq.addHeader("Accept-Encoding", "gzip, deflate, sdch, br");
            getReq.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
            getReq.addHeader("Cache-Control","max-age=0");
            getReq.addHeader("Connection", "keep-alive");
            getReq.addHeader("Host", "openapi.baidu.com");
            getReq.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");
             
            HttpResponse response = httpClient.execute(getReq);
            
            HttpEntity entity = response.getEntity();  
            content1 = EntityUtils.toString(entity,"UTF-8");
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        Map<String, Object> map = JSON.parseObject(content1,new TypeReference<Map<String,Object>>(){});
        String access_token = (String) map.get("access_token");

第三次握手

String content2 = "";
        String url2 = "https://openapi.baidu.com/rest/2.0/passport/users/getInfo?access_token="+access_token+"";
        try {
            //创建一个HttpClient对象
            CloseableHttpClient httpClient = HttpClients.createDefault();
            //创建一个Get请求
            HttpGet getReq = new HttpGet(url2);
            
            getReq.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8    ");
            getReq.addHeader("Accept-Encoding", "gzip, deflate, sdch, br");
            getReq.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
            getReq.addHeader("Cache-Control","max-age=0");
            getReq.addHeader("Connection", "keep-alive");
            getReq.addHeader("Host", "openapi.baidu.com");
            getReq.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");
             
            HttpResponse response = httpClient.execute(getReq);
            
            HttpEntity entity = response.getEntity();  
            content2 = EntityUtils.toString(entity,"UTF-8");
            System.out.println(content2);
            
        } catch (Exception e) {
            e.printStackTrace();
        }
        
        Map<String, Object> map2 = JSON.parseObject(content2,new TypeReference<Map<String,Object>>(){});
    System.out.println(map2);
    
            String baiduid = (String) map2.get("userid");
            System.out.println(baiduid);
            List list = JdbcUtils.getList(User.class, "select * from user where baiduid="+baiduid);
    
    if(list.size() == 0){
        req.setAttribute("message", map2);
        req.getRequestDispatcher("/register.jsp").forward(req, res);
    }else{
        User user = (User) list.get(0);
        req.getSession().setAttribute("UserInfo", user);
        req.getRequestDispatcher("/success.jsp").forward(req, res);
        }

百度登录也就写到这里,需要注意的是,API KEY的值在web工程中要注意修改,另外要注意端口号,如果已经修改了,那么也是需要在工程中改一下的,最后要说的就是ip地址了,其他的一些常见的问题,比如说jar包的使用,路径的修改,这些应该都不是问题。需要提醒的是:全文用的是jdbc去写的,其实框架写的好的人也可以用框架去写,自我感觉,框架可能会省一些代码。

如有不当之处,还请批评指正。

网络实用技术--登录--第三方登录--百度第三方登录相关推荐

  1. QQ、微信、新浪微博和百度第三方登录

    对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppKey和A ...

  2. 实现QQ、微信、新浪微博和百度第三方登录(Android Studio)

    实现QQ.微信.新浪微博和百度第三方登录(Android Studio) 前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第 ...

  3. Android 实现QQ、微信、新浪微博和百度第三方登录

    前言:  对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取App ...

  4. 第三方登录→百度第三方登录

    如何从第三方百度账号登录 前提条件:要有自己的服务器和域名(不需要经过备案). 一,先在百度开发者中心上注册自己的账号 二,鼠标放在右上角自己账户名称上,选择进入应用管理界面, 三,创建工程:创建成功 ...

  5. Django使用Social-Auth实现微信第三方网站扫码登录

    前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...

  6. java加按钮_如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    阅读本文约需要8分钟 大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了HashMap和TreeMap的知识,今天跟大家分享下对 ...

  7. 如何从零开始对接第三方登录(Java版):QQ登录和微博登录

    前言 个人网站最近增加了评论功能,为了方便用户不用注册就可以评论,对接了QQ和微博这2大常用软件的一键登录,总的来说其实都挺简单的,可能会有一点小坑,但不算多,完整记录下来方便后来人快速对接. 后台设 ...

  8. Django实现微信第三方网站扫码登录

    前言 之前让网页公司制作新官网的时候规划有第三方账号的登录功能,但由于当时的一些开放平台申请步骤比较繁琐(尤其是微信开放平台),所以一直拖延着,到了最近只能自己添加相关的功能. 由于是刚接触Pytho ...

  9. 调用接口登录禅道_第三方应用配置免密登录禅道

    禅道11.5.1版本开始,增加第三方应用免密登录禅道的功能. 下面,我们来介绍一下免密登录的具体配置. 一.添加应用,开启免密登录 登录禅道,到后台--二次开发--应用,添加应用时开启免密登录. 只有 ...

  10. 集成友盟第三方实现QQ微信登录遇到的坑

    最近项目集成友盟第三方实现QQ微信登录,在集成实现过程中遇到了一些问题,也对这些问题提出一些自己的解决办法: 集成的过程不就提了,直接上问题: 一.微信登录提示"授权失败,请查看log&qu ...

最新文章

  1. 【问题收录】Ubuntu(14.04)那些我遇到的各种事
  2. leetCode题解之反转二叉树
  3. mysql utf8 乱码_MySql UTF8乱码问题应这样修改
  4. 通过TA binary查看TA的uuid和stack
  5. ICS汇编学习笔记——8086中的寄存器
  6. 学习 WCF (3)--开发WCF客户程序
  7. USACO1.5 Number Triangles(numtri)
  8. SAP CRM WebClient UI Text 可编辑与否的控制逻辑
  9. 亚马逊最大无人售货超市开张,云端结账随拿随走
  10. ARM处理器基本指令大全
  11. c语言从源代码到可执行,从源代码到可执行文件
  12. [转载] Python的变量与常量与基本命名规则
  13. #define中的三个特殊符号:#,##,#@
  14. FZU 2148 Moon Game --判凹包
  15. 常见计算机密码破解实用手册
  16. N81新手入门全攻略——N81常规设置问答篇
  17. 用C++实现文件压缩
  18. 数据分析实战——二手房信息分布分析
  19. 2021年等保2.0工作必须了解的40个问题汇总
  20. harmonyos bate,HarmonyOS 生态最重的拼图,手机开发者 Beta 版终于到来

热门文章

  1. 简单粗暴搞定网易云音乐限制!找回失去的灰色快乐
  2. 录屏怎么录,这2个方法不容错过!
  3. 项目实战 - 使用Fiddler抓取bilibili安卓客户端口数据并分析(http、https)
  4. Inception-V3论文翻译——中文版
  5. 带上问题来看:主流技术Java、Python怎么?基本功又该怎么学?(什么是MySQL、Linux、算法?又该怎么用?)
  6. 【OpenCV】PNG图片压缩方法
  7. Python 爬虫 爬取 煎蛋网 图片
  8. 可能有用的技术社区(转载)
  9. 鸡啄米:C++编程入门系列之目录和总结http://www.jizhuomi.com/software/129.html
  10. javascript javascript面向对象的理解及简单的示例