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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • idea使用步骤_idea怎么编译maven项目

    idea使用步骤_idea怎么编译maven项目1.下载MybatisCodeHelperPro首先我们打开IDEA,点击file,再点击setting,找到Plugins,我们可以从marketplace中下载MybatisCodeHelperPro。2.安装MybatisCodeHelperPro有时候我们打不开marketplace,这时候我们就需要手动安装MybatisCodeHelperPro,我们点击右上角的小齿轮,选择第三项,选择我们的MybatisCodeHelperPro的压缩包,无需解压。然后我们重启IDEA,这里

    2026年2月6日
    5
  • 应用程序框架(一):DDD分层架构:领域实体(基础篇)

    应用程序框架(一):DDD分层架构:领域实体(基础篇)

    2022年3月13日
    145
  • gridview布局_grid css

    gridview布局_grid css页面代码

    2022年9月25日
    4
  • DOS命令大全_黑客cmd命令大全

    DOS命令大全_黑客cmd命令大全Windows命令Net命令IO命令IIS服务命令FTP命令MYSQL命令Linux命令要区分大小写计算机运行命令全集

    2022年8月4日
    7
  • 视频编码格式不支持_缺少编码解码器

    视频编码格式不支持_缺少编码解码器AVI格式视频文件编码格式缺少编码解释器且该项目的编码格式不受支持产生0xc00d5212错误(见下图)解决方案:将AVI格式视频转换为MP4格式视频文件。方式:通过格式工厂软件(见下图)。下载链接:点击下载格式工厂4.8.0.0官方免费版操作:一、下载好软件(格式工厂)之后,点击启动软件进去,点击红色箭头指向的红色框的内容(->MP4)。二、点击红色箭头指向的红色框的…

    2022年9月30日
    5
  • 彻底理解接口幂等性

    彻底理解接口幂等性目录背景 1 幂等性的概念 2 什么情况需要处理接口幂等性问题 2 1select 天然自带幂等性 2 2insert 当我们重复插入数据的时候 会出现什么情况 2 3delete 是否具有幂等性 2 4update 猜一猜是否具有天热幂等性 3 接口幂等性解决方案 3 1 唯一索引 防止新增脏数据 3 2token redis 机制 3 3CAS 保证接口幂等性 3 4 悲观锁 3 5 乐观锁实现幂等 3 6 分布式锁 3 7 防重表 3 8 缓

    2025年8月22日
    7

发表回复

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

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