java 登录 qq_Java实现QQ登录

java 登录 qq_Java实现QQ登录packagecom.ck.blog.controller;importcom.alibaba.fastjson.JSONObject;importcom.ck.blog.exception.StateErrorException;importcom.ck.blog.utils.QQHttpClient;importorg.springframework.beans.factory.an…

大家好,又见面了,我是你们的朋友全栈君。

package com.ck.blog.controller;

import com.alibaba.fastjson.JSONObject;

import com.ck.blog.exception.StateErrorException;

import com.ck.blog.utils.QQHttpClient;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.GetMapping;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import java.net.URLEncoder;

import java.util.UUID;

/*** @author ck* @create 2019-05-18 20:32*/

@Controller

public class QQController {

@Value(“${qq.oauth.http}”)

private String http;

/*** 发起请求* @param session* @return*/

@GetMapping(“/qq/oauth”)

public String qq(HttpSession session){

//QQ互联中的回调地址 String backUrl = http + “/qq/callback”;

//用于第三方应用防止CSRF攻击 String uuid = UUID.randomUUID().toString().replaceAll(“-“,””);

session.setAttribute(“state”,uuid);

//Step1:获取Authorization Code String url = “https://graph.qq.com/oauth2.0/authorize?response_type=code”+

“&client_id=” + QQHttpClient.APPID +

“&redirect_uri=” + URLEncoder.encode(backUrl) +

“&state=” + uuid;

return “redirect:” + url;

}

/*** QQ回调* @param request* @return*/

@GetMapping(“/qq/callback”)

public String qqcallback(HttpServletRequest request) throws Exception {

HttpSession session = request.getSession();

//qq返回的信息:http://graph.qq.com/demo/index.jsp?code=9A5F************************06AF&state=test String code = request.getParameter(“code”);

String state = request.getParameter(“state”);

String uuid = (String) session.getAttribute(“state”);

if(uuid != null){

if(!uuid.equals(state)){

throw new StateErrorException(“QQ,state错误”);

}

}

//Step2:通过Authorization Code获取Access Token String backUrl = http + “/qq/callback”;

String url = “https://graph.qq.com/oauth2.0/token?grant_type=authorization_code”+

“&client_id=” + QQHttpClient.APPID +

“&client_secret=” + QQHttpClient.APPKEY +

“&code=” + code +

“&redirect_uri=” + backUrl;

String access_token = QQHttpClient.getAccessToken(url);

//Step3: 获取回调后的 openid 值 url = “https://graph.qq.com/oauth2.0/me?access_token=” + access_token;

String openid = QQHttpClient.getOpenID(url);

//Step4:获取QQ用户信息 url = “https://graph.qq.com/user/get_user_info?access_token=” + access_token +

“&oauth_consumer_key=”+ QQHttpClient.APPID +

“&openid=” + openid;

JSONObject jsonObject = QQHttpClient.getUserInfo(url);

//也可以放到Redis和mysql中 session.setAttribute(“openid”,openid); //openid,用来唯一标识qq用户 session.setAttribute(“nickname”,(String)jsonObject.get(“nickname”)); //QQ名 session.setAttribute(“figureurl_qq_2”,(String)jsonObject.get(“figureurl_qq_2”)); //大小为100*100像素的QQ头像URL

return “redirect:/home”;

}

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157093.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2019版idea激活码99年破解方法

    2019版idea激活码99年破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
  • python android开发_python编制应用程序

    python android开发_python编制应用程序本节目录:1.下载和安装ScriptingLayerforAndroid(SL4A)2.下载和安装Pythonforandroid3.第一个HelloWorld程序1.下载和安装ScriptingLayerforAndroid(SL4A)ScriptingLayerforAndroid(SL4A)是一个开源项目,目标是为android系统提供脚本语言的支持,使用…

    2022年8月12日
  • 怎么学计算机自学,怎样才能学会电脑 快速入门的学习办法

    怎么学计算机自学,怎样才能学会电脑 快速入门的学习办法现在的家庭有电脑已经不是一件很稀罕的事情了,有些人可能是因为年纪、或是因为对电脑的熟悉不高,所以对电脑的使用不太了解,一直徘徊在电脑知识的殿堂门口,为了帮助更多人可以使用上电脑,小编今天为大家带来了一些电脑的入门知识,告诉大家怎样才能学会电脑。一、怎样才能学会电脑1、在学习电脑之前,我们首先要有一个明确的目标,这样才会有方向感。知道自己需要了解什么方面的电脑知识。像是硬件维修、调试、软件编程、电脑…

    2022年6月5日
  • flowable 流程引擎总结

    flowable 流程引擎总结最近公司使用Flowable开发了自己的OA系统,因此对Flowable的相关内容进行如下总结一、Flowable是什么目前最新版是Flowable6.4.2(2019年07月26日)官网地址:https://www.flowable.org/github地址:https://github.com/flowableFlowable是一个使用Java编写的轻量级业务流程引擎,使用ApacheV2license协议开源。2016年10月,Activiti工作流引.

    2022年10月20日
  • ubuntu-apache下隐藏thinkphp入口文件index.php

    ubuntu-apache下隐藏thinkphp入口文件index.php

    2021年9月24日
  • 用户名为中文软件不能用_电脑用户名打不了中文

    用户名为中文软件不能用_电脑用户名打不了中文(软件必须要求路径和用户名都是英文,比如SystemVue和MATLAB)我安装matlab也是一路坎坷,一开始每次激活成功后就自动关闭,再次打开依旧提示激活,无论是在线激活还是本地选择license文件都不行(.lic文件是从Mathwork上登录后下载下来的)。讲道理是还有一年期限,不会过期的,但是试了好久启动不了。后来发现license文件放错了位置,应该放在安装目录下,如C:\Progr…

    2022年10月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号