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)
上一篇 2022年7月8日 上午7:36
下一篇 2022年7月8日 上午7:36


相关推荐

  • 国内直连!Gemini3.0、Grok4.1、ChatGPT5.2、Sora2 等主流 AI 大模型一站式使用攻略

    国内直连!Gemini3.0、Grok4.1、ChatGPT5.2、Sora2 等主流 AI 大模型一站式使用攻略

    2026年3月15日
    2
  • 简述直方图和柱形图的区别_直方图与条形图有何区别

    简述直方图和柱形图的区别_直方图与条形图有何区别直方图与条形图有何区别 1 条形图是用条形的长度表示各类别频数的多少 其宽度则是固定的 直方图是用面积表示各组频数的多少 矩形的高度表示每一组的频数或频率 宽度则表示各组的组距 因此其高度宽度均有意义 2 由于分组数据具有连续性 直方图的各矩形通常是连续排列 而条形图是分开排列 3 条形图主要用于展示分类数据 直方图主要用于展示数值型数据 相关分析主要解决哪些问题 1 变量之间是否存在关系 2 如果存在关系 它们

    2026年3月19日
    2
  • IDEA学习笔记「建议收藏」

    IDEA学习笔记「建议收藏」1、IDEA的安装、配置和使用1.1概述1.1.1JetBrains概述IDEA(https://www.jetbrains.com/idea/)JetBrains公司的产品,公司旗下还有其它产品,比如: WebStorm:用于开发JavaScript、HTML5、CSS3等前端技术; PyCharm:用于开发python PhpStorm:用于开发PHP RubyMine:用于开发Ruby/Rails AppCode:用于开发Ob

    2022年5月29日
    118
  • 如何高效导入CSV至文心一言:技术指南与实践策略

    如何高效导入CSV至文心一言:技术指南与实践策略

    2026年3月12日
    2
  • Java继承

    Java继承一:继承的概述1.继承的定义继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。–注:父类又称为超类或者基类。子类又称为派生类!2.继承的格式通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:class父类{…}class子类extends父类{…}二、关于继承之后的成员变量1.当成员变量不重名如果子类父类中出现不重名的成员变量,这时的访问是没有影

    2022年7月7日
    19
  • vmware15最新激活码可用破解方法

    vmware15最新激活码可用破解方法,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
    66

发表回复

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

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