第三方登陆-百度

                                              百度第三方登陆

第三方登录指的是当你需要登录某个网站时如果没有该网站的账号,可以通过其他的账号去登陆。例如:QQ账号,百度账号等等。

该博客主要讲如何实现通过百度账号去登陆。

第一步,创建百度开发者服务工程

首先,登录百度开发者中心网站:https://developer.baidu.com,用百度账号登陆。

点击账号(红框标注的地方),选择“应用管理”

第三方登陆-百度_第1张图片

进入下图界面

第三方登陆-百度_第2张图片

填写应用名称,点击创建工程

第三方登陆-百度_第3张图片

创建好之后点击进入该工程

第三方登陆-百度_第4张图片

进入该界面之后找到安全设置

第三方登陆-百度_第5张图片

进入安全设置页面之后按照要求填写要使用百度账号的网站的域名、IP、和你要返回的界面(即授权回调页)

第三方登陆-百度_第6张图片

配置完毕之后点击确定,第一步结束。

第二步,在你的网站中使用

在你要使用第三方登录的地方加一个JavaScript函数

其中,client_id改成你自己的id,也就是第一步创建的工程的API KEY,redirect_uri改成你要回调的页面

第三方登陆-百度_第7张图片

接下来创建之前的回调页面例如我上面写的BaiDuServelt

在文件中接受该登陆者百度账号的基本信息

代码如下

import java.io.IOException;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

public class BaiDuServlet extends HttpServlet {

	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String code = request.getParameter("code");//从百度账号用code接收信息
		String redirect_uri = "http://www.lichenxi1.top/venu/BaiDuServlet";//回调页面网址
		String client_secret = "q6C4xDfmxtA05cg8YHnypMtZMqsLst9w";//Secret Key
		String client_id = "q9oaKwxIeLwQQNzYIsOsOMkU";//API Key
		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 res = httpClient.execute(getReq);

			HttpEntity entity = res.getEntity();
			content1 = EntityUtils.toString(entity, "UTF-8");

		} catch (Exception e) {
			e.printStackTrace();
		}

		Map map = JSON.parseObject(content1, new TypeReference>() {
		});
		String access_token = (String) map.get("access_token");

		print(access_token, request, response);
	}

	public void print(String access_token,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String content = "";
		String url = "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(url);

			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");

			HttpEntity entity = httpClient.execute(getReq).getEntity();
			content = EntityUtils.toString(entity, "UTF-8");
			System.out.println(content);
		} catch (Exception e) {
			e.printStackTrace();
		}

		Map map = JSON.parseObject(content, new TypeReference>() {});
		System.out.println(map);

		String baiduid = (String) map.get("userid");
		System.out.println(baiduid);
		//List list = JdbcUtils.getList(User.class, "select * from user where baiduid=" + baiduid);

//		if (list.size() == 0) {
		request.setAttribute("message", map);
		request.getRequestDispatcher("/result.jsp").forward(request, response);//将接收的值发送到网页,并跳转到该网页
//		} else {
//			User user = (User) list.get(0);
//			req.getSession().setAttribute("UserInfo", user);
//			req.getRequestDispatcher("/success.jsp").forward(req, res);
//		}
	}

}

跳转到的网页中用下面的语句就可以输出从百度账号获取的值

<%=request.getAttribute("message") %>

最后把写好的工程发布,就可以访问了

 

你可能感兴趣的:(JAVA)