Java第三方登录封装工具类
Java中可以使用第三方登录来简化用户登录流程,常见的第三方登录如QQ、微信、微博等。下面是一个Java封装第三方登录的工具类:
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;import org.apache.http.client.ClientProtocolException;import com.alibaba.fastjson.JSONObject;
import com.qq.connect.QQConnectException;
import com.qq.connect.oauth.Oauth;
import com.qq.connect.utils.HttpClientUtils;
import com.qq.connect.utils.QQConnectConfig;
import com.qq.connect.utils.RandomStatusGenerator;public class ThirdPartyLoginUtil {// QQ登录回调地址,需与QQ应用中的回调地址一致private static final String CALLBACK_URL = "http://localhost:8080/qq/callback";/*** 获取QQ授权页面地址* @param state 随机数,用于防止CSRF攻击* @return 授权页面地址* @throws QQConnectException*/public static String getQQAuthorizeURL(String state) throws QQConnectException {return new Oauth().getAuthorizeURL(CALLBACK_URL, state, "", "");}/*** 获取QQ用户信息* @param accessToken 访问令牌* @param openId 用户在QQ空间的唯一标识符* @return 用户信息Map集合* @throws QQConnectException* @throws ClientProtocolException* @throws IOException*/public static Map<String, Object> getQQUserInfo(String accessToken, String openId) throws QQConnectException, ClientProtocolException, IOException {String url = QQConnectConfig.getValue("getUserInfoURL") + "?access_token=" + accessToken + "&oauth_consumer_key=" + QQConnectConfig.getValue("app_ID") + "&openid=" + openId;String response = HttpClientUtils.get(url);JSONObject jsonObject = JSONObject.parseObject(response);Map<String, Object> userInfo = new HashMap<String, Object>();userInfo.put("nickname", jsonObject.getString("nickname"));userInfo.put("gender", jsonObject.getString("gender"));userInfo.put("figureurl", jsonObject.getString("figureurl_qq_2"));return userInfo;}/*** 生成随机数,用于防止CSRF攻击* @return 随机数*/public static String generateState() {return RandomStatusGenerator.getUniqueState();}}
以上代码基于QQ登录进行封装,其他第三方登录可根据需求进行修改。使用时,可以先在配置文件中设置QQ应用的App ID和App Key:
app_ID=your_app_id
app_Key=your_app_key
getUserInfoURL=https://graph.qq.com/user/get_user_info
然后在登录页面中生成随机数和授权链接:
<a href="<%=ThirdPartyLoginUtil.getQQAuthorizeURL(ThirdPartyLoginUtil.generateState())%>">QQ登录</a>
在回调页面中获取访问令牌和用户信息(需验证state参数):
String stateInSession = (String) request.getSession().getAttribute("state");
String state = request.getParameter("state");
if (!state.equals(stateInSession)) {// 非法访问
}
String code = request.getParameter("code");
AccessToken accessTokenObj = new Oauth().getAccessTokenByCode(code, ThirdPartyLoginUtil.CALLBACK_URL);
String accessToken = accessTokenObj.getAccessToken();
String openId = new OpenID(accessToken).getUserOpenID();
Map<String, Object> userInfo = ThirdPartyLoginUtil.getQQUserInfo(accessToken, openId);
获取到用户信息后,可以进行登录操作或跳转到注册页面进行账号绑定。
相关文章:
Java第三方登录封装工具类
Java中可以使用第三方登录来简化用户登录流程,常见的第三方登录如QQ、微信、微博等。下面是一个Java封装第三方登录的工具类: import java.io.IOException; import java.util.HashMap; import java.util.Map;import org.apache.http.client.ClientProto…...
BUUCTF学习(四): 文件包含tips
1、介绍 2、hackBar插件安装 教程: Hackbar插件安装-CSDN博客 3、解题 php://filter/readconvert.base64-encode/resource要读取的文件 ?filephp://filter/readconvert.base64-encode/resourceflag.php Base64 在线编码解码 | Base64 加密解密 - Base64.us 结束...
德国人工智能公司【Kodex AI】完成160万欧元融资
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于德国柏林的人工智能公司【Kodex AI】今日宣布已完成160万欧元融资。 本轮融资由Signals VC领投,Techstars、德意志银行等天使投资者参与,其中包括:most AI首席执行官…...
LeetCode 2 两数相加
题目描述 链接:https://leetcode.cn/problems/add-two-numbers/?envTypefeatured-list&envId2ckc81c?envTypefeatured-list&envId2ckc81c 难度:中等 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式…...
springboot项目启动失败,不打印报错详细信息(启动打印日记问题)
1:出现这种我问题一般都是日记的问题,查看控制台启动打印的第一句,为什么启动失败,需要用那个日记 2:如果使用的是log4j或者logback与slf4j都是默认在依赖web自带的如下 <dependency><groupId>org.springf…...
MyBatis (where、set、foreach)标签
where标签 在上一节SQL 语句中加入了一个条件“11”,如果没有加入这个条件,那么可能就会变成下面这样一条错误的语句。 SELECT id,name,url,age,country FROM website AND name LIKE CONCAT(%,#{name},%)显然以上语句会出现 SQL 语法异常,但…...
flutter开发之安装dart
1、在MacOS系统中打开终端,进入到官网Get the Dart SDK | Dart brew tap dart-lang/dartbrew install dart 注意:若显示没有brew,请先执行第二步骤,如下: 2、打开homebrew的官网Homebrew — The Missing Package Man…...
向量召回:深入评估离线体系,探索优质召回方法
向量召回:深入评估离线体系,探索优质召回方法 1.简介 近年来,基于向量进行召回的做法在搜索和推荐领域都得到了比较广泛的应用,并且在学术界发表的论文中,基于向量的 dense retrieve 的方法也在不少数据集上都战胜了 sparse retrieve,吸引了越来越多的关注。在内网的不…...
播放器缓存队列bug解决方案
背景 我在开发一个播放器的缓存队列时,遇到一个bug,导致包和帧无法被下一个模块读取 找了半天,原来是队列中的包和帧数据要进行内容的刷新暂存 包数据和帧数据不能直接放入队列 //入队,包进队列 int AVPacketQueue::Push(AVPacket *val,i…...
React拖拽实践
当涉及到前端开发中的用户体验时,拖拽功能是一个常见而重要的需求。在React中,实现拖拽功能可以通过多种方式完成,但通常需要深刻理解React的状态管理、事件处理和DOM操作。本文将探讨React中拖拽的实践,包括基本原理、拖拽库的使…...
Stable Diffusion绘图,lora选择
best quality, ultra high res, (photorealistic:1.4), 1girl, off-shoulder white shirt, black tight skirt, black choker, (faded ash gray hair:1), looking at viewer, closeup <lora:koreandolllikeness_v20:0.66> 最佳品质,超高分辨率,&am…...
kube-controller-manager和kube-scheduler不能正常启动
kube-controller-manager-k8s-worker01和kube-scheduler-k8s-worker01没有启动起来 原因: 解决:进入/etc/kubernetes/manifests 编辑 将镜像地址修改为 然后重启kubelet:systemctl restart kubelet.service...
Mac OS m1 下安装Gradle5.1
1. 下载、解压 1.1 下载地址 https://gradle.org 往下翻 选择 5.1 或者选择 任何 你想要的版本 ,点击 binary-only 即可下载 . 1.2 解压到指定目录 2. 配置环境变量 2.1 编辑环境文件 vi ~/.bash_profile #GRADLE相关配置 GRADLE_HOME/Users/zxj/Documents/devSoft/grad…...
JUC并发编程面试题(自用)
线程池 1 线程池的作用:提高线程的利用率,线程复用,频繁的创建和销毁线程非常浪费资源 线程池的七大参数: corePoolSize(核心线程数):线程池中始终保持的活动线程数,即使它们处于空…...
Redis分布式会话
当探讨Redis分布式会话管理时,以下是更加详细的知识点: 1. 会话管理的挑战: 在分布式应用程序中,每个用户请求可能由不同的服务器处理。这导致了会话数据的分散性,需要一种方法来维护一致性的用户会话状态。 2. Redi…...
程序员大厂之鹅厂探秘
...
【Java 进阶篇】深入理解 JavaScript DOM Node 对象
在前端开发中,与HTML文档进行交互是一项基本任务。文档对象模型(Document Object Model,简称DOM)为开发者提供了一种以编程方式访问和操作HTML文档的方式。DOM的核心是节点(Node)对象,它代表了文…...
测试用例基础
测试用例的基本要素 测试环境, 操作步骤, 测试数据, 预期结果 测试用例的设计方法 基于需求的设计方法 需求文档 -> 梳理需求(掌握需求) -> 针对文档设计测试用例 只是针对需求进行大概的测试 具体的设计方法 等价类 等价类: 依据需求将输入(特殊情况…...
“Flex弹性布局、轮播图mock遍历数据和首页布局解析与实践“
目录 引言1. Flex弹性布局介绍及使用什么是Flex弹性布局?Flex容器与Flex项目Flex属性详解 2. 轮播图mock遍历数据简述轮播图的作用和意义处理mock数据的重要性使用Mock模拟数据遍历 3. 首页布局总结 引言 在现代网页开发中,灵活性和响应式布局是至关重要…...
自动化办公篇之python
1、如果没有安装xlwings库,先在控制台pip install xlwings,然后点击运行,创建四个空excel表 。 import xlwings as xw app xw.App(visibleTrue,add_bookFalse) for dept in ["技术部","销售部","运营部","财务部&q…...
解锁B站直播自由:第三方推流工具深度技术解析
解锁B站直播自由:第三方推流工具深度技术解析 【免费下载链接】bilibili_live_stream_code 用于在准备直播时获取第三方推流码,以便可以绕开哔哩哔哩直播姬,直接在如OBS等软件中进行直播,软件同时提供定义直播分区和标题功能 项…...
xArm机械臂电气接口全解析:从末端法兰到RS485的实战避坑指南
xArm机械臂电气接口全解析:从末端法兰到RS485的实战避坑指南 在工业自动化领域,机械臂的电气接口设计往往是决定系统稳定性的关键因素。作为国内领先的协作机器人品牌,xArm以其出色的性价比和开放性接口设计赢得了众多工程师的青睐。但当我们…...
5大维度解析:Label Studio ML Backend如何实现自动化标注效率革命
5大维度解析:Label Studio ML Backend如何实现自动化标注效率革命 【免费下载链接】label-studio-ml-backend Configs and boilerplates for Label Studios Machine Learning backend 项目地址: https://gitcode.com/gh_mirrors/la/label-studio-ml-backend …...
心理医生哪家强?真实就诊指南+案例分享
行业痛点分析当前长沙心理诊疗领域面临多重技术挑战。数据显示,长沙市精神障碍患病率约为17.5%,其中焦虑、抑郁类障碍占比达62%,但实际就诊率不足30%。测试显示,三甲医院心理科平均排队时间超过45天,单次就诊时长不足1…...
ZUI 3组件库深度解析:50+实用组件如何提升开发效率 [特殊字符]
ZUI 3组件库深度解析:50实用组件如何提升开发效率 🚀 【免费下载链接】zui ZUI is an HTML5 front UI framework. 项目地址: https://gitcode.com/gh_mirrors/zu/zui ZUI 3是一个全新的开源HTML5前端UI框架,提供了超过50个实用组件&am…...
免费音频编辑终极指南:Audacity 4 让专业音频处理触手可及
免费音频编辑终极指南:Audacity 4 让专业音频处理触手可及 【免费下载链接】audacity Audio Editor 项目地址: https://gitcode.com/GitHub_Trending/au/audacity 你是否曾经想要编辑音频却苦于没有合适的工具?或者被昂贵复杂的专业软件吓退&…...
每日一道面试题 08:SpringBoot 自动配置原理
一、核心前提SpringBoot 核心优势:自动配置,无需手动编写大量 XML 配置,简化开发(本质是 “约定优于配置”)自动配置底层依赖:EnableAutoConfiguration 注解 Spring 工厂加载机制 条件注解核心目标&#…...
LongCat-Image-Editn V2效果展示:看AI如何精准将图中的猫变成狗
LongCat-Image-Editn V2效果展示:看AI如何精准将图中的猫变成狗 1. 效果惊艳开场:当AI成为你的修图助手 想象一下这样的场景:你拍了一张完美的照片,构图、光线、背景都无可挑剔,唯一的遗憾是照片里的主角——你的猫咪…...
如何让多设备协作更高效?揭秘QKeyMapper的跨硬件无缝解决方案
如何让多设备协作更高效?揭秘QKeyMapper的跨硬件无缝解决方案 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支持游戏手柄映射到键鼠&…...
Claude Code /buddy 命令失效了?教你一招绕过限制,直接解锁金色传说!
最近升级到 Claude Code > v2.1.90 的小伙伴可能发现,输入 /buddy 命令后只会提示: buddy is unavailable on this configuration GitHub 上的 issue 也有相关讨论,官方把这个命令禁用了。那刚安装或升级的用户就没法体验 buddy 了吗&…...
