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


相关推荐

  • mysql字符串转数字_mysql字符串转数字小计

    mysql字符串转数字_mysql字符串转数字小计问题:要求比较’100%’和’95%’的大小实践:mysql>SELECT’100%’>’95%’;+—————-+|’100%’>’95%’|+—————-+|0|+—————-+1rowinset(0.00sec)发现’100%’竟然小于’95%’原因:因为是字…

    2022年5月30日
    45
  • 通讯加密方式?「建议收藏」

    通讯加密方式?「建议收藏」客户端信道处理ProcessMessage1加密通讯 初始唯一标识和加密提供程序 向服务器请求密钥并根据响应的密钥初始化加密提供程序(服务端需验证IP合法性) 根据加密提供程序加密请求消息 向服务器发起请求 根据加密提供程序解密响应流。 返回。2非加密通讯 初始唯一标识和加密提供程序 向服务器请求密钥并根据响应的密钥初始化加密提供程序(服务端需验证IP合法性) 向服务器发起请求 返回…

    2022年5月2日
    62
  • 服务器性能测试有哪些,什么是服务器Web性能测试?主要包含哪几个方面?

    服务器性能测试有哪些,什么是服务器Web性能测试?主要包含哪几个方面?原标题 什么是服务器 Web 性能测试 主要包含哪几个方面 什么是 Web 软件性能测试 跟性能测试有什么不同 Web 软件性能测试是一种收集信息和分析信息的过程 主要目的是用来检查程序是否具有良好的性能 为维护系统的性能找到有效的改善策略 性能测试主要是考察在不同的用户负载下 Web 应用对用户请求作出的响应情况 以确保将来系统运行的安全性 可靠性和执行效车 Web 性能测试能够基露出系统的性能瓶颈问题 并

    2025年10月17日
    4
  • SpringIoc 实现原理

    SpringIoc 实现原理什么是SpringIOCspringioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。如何理解好Ioc呢?理解好Ioc的关键是要明确“谁控制谁,控制什么,…

    2022年6月18日
    23
  • 常见的ARM集成开发环境

    常见的ARM集成开发环境1.ARMSDT:是ARM公司为方便用户在ARM芯片上进行应用软件开发而推出的一整套开发工具。到ARMSDT2.5.1,ARM宣布推出ARMADS1.0取代了ARMSDT,不再对ARMSDT进行维护。ARMSDT支持的ARM处理器最高到包括ARM9在内的所有ARM处理器。配合Angel驻留程序和JTAG仿真器,用户使用可方便的使用ARMSDT进行应用程序的开发。2.ARM

    2022年5月18日
    38
  • 如何彻底卸载MySQL

    如何彻底卸载MySQL

    2021年8月28日
    51

发表回复

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

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