From ff9b756e79156c18da1812d8bb727ddd3148cdbb Mon Sep 17 00:00:00 2001 From: qraddx Date: Fri, 18 Feb 2022 10:25:15 +0800 Subject: [PATCH] =?UTF-8?q?:sparkles:=20Introducing=20new=20features.=20#3?= =?UTF-8?q?295=20=E5=A2=9E=E5=8A=A0QQ=E7=99=BB=E5=BD=95=E7=9A=84=E6=94=AF?= =?UTF-8?q?=E6=8C=81=EF=BC=8C=E4=BF=AE=E6=94=B9=E7=BB=91=E5=AE=9A=E6=89=8B?= =?UTF-8?q?=E6=9C=BA=E5=8F=B7=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pigx-upms/pigx-upms-biz/pom.xml | 5 - .../pigx/admin/handler/CasLoginHandler.java | 5 +- .../pigx/admin/handler/SmsLoginHandler.java | 2 +- .../admin/handler/TencentLoginHandler.java | 121 ++++++++++++++++++ .../impl/SysSocialDetailsServiceImpl.java | 2 +- pigx-visual/pigx-codegen/pom.xml | 5 - 6 files changed, 126 insertions(+), 14 deletions(-) create mode 100644 pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/TencentLoginHandler.java diff --git a/pigx-upms/pigx-upms-biz/pom.xml b/pigx-upms/pigx-upms-biz/pom.xml index 2d6d5e3f5..c6b330d54 100644 --- a/pigx-upms/pigx-upms-biz/pom.xml +++ b/pigx-upms/pigx-upms-biz/pom.xml @@ -33,11 +33,6 @@ pigx 通用用户权限管理系统业务处理模块 - - - com.pig4cloud - pigx-common-transaction - mysql diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/CasLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/CasLoginHandler.java index 3264de26f..6c7241be5 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/CasLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/CasLoginHandler.java @@ -58,14 +58,15 @@ public class CasLoginHandler extends AbstractLoginHandler { SysSocialDetails condition = new SysSocialDetails(); condition.setType(LoginTypeEnum.CAS.getType()); SysSocialDetails socialDetails = sysSocialDetailsMapper.selectOne(new QueryWrapper<>(condition)); + // remark 字段填写 CAS 服务器的URL Cas30ProxyTicketValidator cas30ProxyTicketValidator = new Cas30ProxyTicketValidator(socialDetails.getRemark()); Assertion validate = cas30ProxyTicketValidator.validate(ticket, socialDetails.getRedirectUrl()); return validate.getPrincipal().getName(); } /** - * openId 获取用户信息 - * @param openId + * username 获取用户信息 + * @param username * @return */ @Override diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java index 1e9fb5127..acb147f7b 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/SmsLoginHandler.java @@ -70,7 +70,7 @@ public class SmsLoginHandler extends AbstractLoginHandler { */ @Override public Boolean bind(SysUser user, String identify) { - user.setGiteeLogin(identify); + user.setPhone(identify); sysUserService.updateById(user); return null; } diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/TencentLoginHandler.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/TencentLoginHandler.java new file mode 100644 index 000000000..ef227e30d --- /dev/null +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/handler/TencentLoginHandler.java @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2018-2025, lengleng All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the pig4cloud.com developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: lengleng (wangiegie@gmail.com) + */ + +package com.pig4cloud.pigx.admin.handler; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.pig4cloud.pigx.admin.api.dto.UserInfo; +import com.pig4cloud.pigx.admin.api.entity.SysSocialDetails; +import com.pig4cloud.pigx.admin.api.entity.SysUser; +import com.pig4cloud.pigx.admin.mapper.SysSocialDetailsMapper; +import com.pig4cloud.pigx.admin.service.SysUserService; +import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.core.constant.enums.LoginTypeEnum; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * @author lengleng + * @date 2018/11/18 + */ +@Slf4j +@Component("QQ") +@AllArgsConstructor +public class TencentLoginHandler extends AbstractLoginHandler { + + private final SysUserService sysUserService; + + private final SysSocialDetailsMapper sysSocialDetailsMapper; + + /** + * QQ登录传入code + *

+ * 通过code 调用qq 获取唯一标识 + * @param code + * @return + */ + @Override + public String identify(String code) { + SysSocialDetails condition = new SysSocialDetails(); + condition.setType(LoginTypeEnum.QQ.getType()); + SysSocialDetails socialDetails = sysSocialDetailsMapper.selectOne(new QueryWrapper<>(condition)); + + String url = String.format(SecurityConstants.QQ_AUTHORIZATION_CODE_URL, socialDetails.getAppId(), + socialDetails.getAppSecret(), code); + String result = HttpUtil.get(url); + log.debug("QQ响应报文:{}", result); + + String accessToken = JSONUtil.parseObj(result).getStr("access_token"); + String userUrl = String.format(SecurityConstants.QQ_USER_INFO_URL, accessToken); + String resp = HttpUtil.get(userUrl); + log.debug("QQ获取个人信息返回报文{}", resp); + + JSONObject userInfo = JSONUtil.parseObj(resp); + // QQ唯一标识 + String openid = userInfo.getStr("openid"); + return openid; + } + + /** + * openId 获取用户信息 + * @param openId + * @return + */ + @Override + public UserInfo info(String openId) { + SysUser user = sysUserService.getOne(Wrappers.query().lambda().eq(SysUser::getQqOpenid, openId)); + + if (user == null) { + log.info("QQ未绑定:{}", openId); + return null; + } + return sysUserService.findUserInfo(user); + } + + /** + * 绑定逻辑 + * @param user 用户实体 + * @param identify 渠道返回唯一标识 + * @return + */ + @Override + public Boolean bind(SysUser user, String identify) { + List userList = sysUserService + .list(Wrappers.query().lambda().eq(SysUser::getQqOpenid, identify)); + + // 先把原有绑定关系去除,设置绑定为NULL + if (CollUtil.isNotEmpty(userList)) { + SysUser condition = new SysUser(); + condition.setQqOpenid(identify); + sysUserService.update(condition, Wrappers.lambdaUpdate().set(SysUser::getQqOpenid, null)); + log.info("QQ账号 {} 更换账号绑定", identify); + } + + user.setQqOpenid(identify); + sysUserService.updateById(user); + return null; + } + +} diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysSocialDetailsServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysSocialDetailsServiceImpl.java index 0d7bdcf21..d50b54b09 100755 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysSocialDetailsServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysSocialDetailsServiceImpl.java @@ -79,7 +79,7 @@ public class SysSocialDetailsServiceImpl extends ServiceImplorg.springframework.boot spring-boot-starter-undertow - - - com.pig4cloud - pigx-common-transaction -