编写移动端钉钉登录

This commit is contained in:
476474485@qq.com 2024-09-14 15:21:44 +08:00
parent f0db5772a2
commit 44fb1eaca1
3 changed files with 136 additions and 1 deletions

View File

@ -15,4 +15,13 @@ public interface ILoginService {
* @throws Exception
*/
JsonResultEntity doLogin(JSONObject jsonObject)throws Exception;
/****
* 移动端登录
* @content:
* @author 👻👻👻👻👻👻👻👻 gjh
* @date 2024-09-14 10:51
* @param
* @return com.hzya.frame.web.entity.JsonResultEntity
**/
JsonResultEntity appDoLogin(JSONObject jsonObject) ;
}

View File

@ -2,7 +2,18 @@ package com.hzya.frame.sysnew.login.impl;
import cn.dev33.satoken.stp.SaTokenInfo;
import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.hzya.frame.sysnew.application.dao.ISysApplicationDao;
import com.hzya.frame.sysnew.application.entity.SysApplicationEntity;
import com.hzya.frame.sysnew.login.ILoginService;
@ -21,11 +32,15 @@ import com.hzya.frame.sysnew.userRoles.entity.SysUserRolesEntity;
import com.hzya.frame.util.AESUtil;
import com.hzya.frame.web.entity.BaseResult;
import com.hzya.frame.web.entity.JsonResultEntity;
import com.hzya.frame.web.exception.BaseSystemException;
import org.checkerframework.checker.units.qual.C;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
/**
@ -35,6 +50,7 @@ import java.util.List;
**/
@Service(value = "loginService")
public class LoginServiceImpl implements ILoginService {
private final Logger logger = LoggerFactory.getLogger(LoginServiceImpl.class);
@Resource
private ISysUserDao sysUserDao;
@ -131,6 +147,116 @@ public class LoginServiceImpl implements ILoginService {
return BaseResult.getSuccessMessageEntity("登录成功", res);
}
/****
* 移动端登录地址
* @content:
* @author 👻👻👻👻👻👻👻👻 gjh
* @date 2024-09-14 11:14
* @param
* @return com.hzya.frame.web.entity.JsonResultEntity
**/
@Override
public JsonResultEntity appDoLogin(JSONObject jsonObject) {
//移动端类型
JSONObject entity = getData("jsonStr", jsonObject, JSONObject.class);
//DD,weChat
String appType = entity.getString("appType");
String appId = entity.getString("appId");
String apiCode = entity.getString("apiCode");
String userApiCode = entity.getString("userApiCode");
SysUserEntity userEntity = new SysUserEntity();
switch (appType){
case "DD":
String code = entity.getString("code");//授权码
String requestType = entity.getString("UserAgent");// pc端还是移动端
JSONObject bodyParams = new JSONObject();
bodyParams.put("code",code);
String result = HttpRequest.post("http://127.0.0.1:9999/kangarooDataCenterV3/entranceController/externalCallInterface").
header("appId",appId).
header("apiCode",userApiCode).
header("publicKey","ZJYAWb7lhAUTYqekPkU+uHJv1/ObJxb7dT7sD8HPRDGAgyhCe7eDIk+3zDUT+v578prj").
header("secretKey","fviZnLBsQUAGF8w8FSOdJi7XlIm/XAZclMxRagDLfTyJFlvnIBF3w66Hrpfzs8cYj3JzOP8MtA1LSGvL+2BWG8c/o7DKi92S4mr3zcGearA=").
body(bodyParams.toJSONString()).
execute().
body();
JSONObject resultJson = JSONObject.parseObject(result);
boolean flag = resultJson.getBoolean("flag");
if(!flag){
throw new BaseSystemException("请求错误:"+resultJson.getString("msg"));
}
String userid = resultJson.getString("userid");
if(StrUtil.isEmpty(userid)){
return BaseResult.getFailureMessageEntity("认证失败!当前用户未绑定钉钉","1005");
}
userEntity.setDdUserId( userid);
userEntity = sysUserDao.queryOne(userEntity);
if(null == userEntity ){
if(StrUtil.isEmpty(userid)){
JSONObject object = new JSONObject();
object.put("userid",userid);
return BaseResult.getFailureMessageEntity("认证失败!当前用户未绑定钉钉","1005",object);
}
}
break;
case "weChat":
break;
default:
throw new BaseSystemException("错误的App类型:"+appType+" 支持的app类型有DD,weChat");
}
//登录
StpUtil.login(userEntity.getId());
//获取token
SaTokenInfo tokenInfo = StpUtil.getTokenInfo();
String token = tokenInfo.getTokenValue();
//获取公司
SysOrganEntity sysOrganEntity = new SysOrganEntity();
sysOrganEntity.setUserId(userEntity.getId());
List<SysOrganEntity> sysOrganEntities = sysOrganDao.queryUserCompany(sysOrganEntity);
//返回值
JSONObject res = new JSONObject();
res.put("token", token);
res.put("userInfo", userEntity);
res.put("company", sysOrganEntities);
//切换数据源查询
return BaseResult.getSuccessMessageEntity("登录成功", res);
//校验当前登陆人是否有权限
//boolean flag = false;
//SysInterfaceEntity sysInterfaceEntity = (SysInterfaceEntity) interfaceCache.get("6","beanNameloginServiceinterfacNamedoLogin");
//if(sysInterfaceEntity == null || sysInterfaceEntity.getId() == null){
// return BaseResult.getFailureMessageEntity("用户无访问权限,请联系管理员");
//}
////查询用户权限
//if(!flag){
// SysPopedomInterfaceEntity userPopedomInterfaceEntity = (SysPopedomInterfaceEntity) interfaceCache.get("4","userId"+sysUserEntity.getId()+"interfaceId"+sysInterfaceEntity.getId());
// if(userPopedomInterfaceEntity != null && userPopedomInterfaceEntity.getId() != null ){
// flag = true;
// }
//}
////查询用户角色的权限
//if(!flag){
// List<SysUserRolesEntity> userRoleMap = (List<SysUserRolesEntity>) interfaceCache.get("3",null);
// if(userRoleMap != null && userRoleMap.size() > 0){
// for (SysUserRolesEntity sysUserRolesEntity : userRoleMap) {
// if(sysUserRolesEntity.getUserId().equals(sysUserEntity.getId())){
// SysPopedomInterfaceEntity sysPopedomInterfaceEntity = (SysPopedomInterfaceEntity) interfaceCache.get("5","roleId"+sysUserRolesEntity.getRoleId()+"interfaceId"+sysInterfaceEntity.getId());
// if(sysPopedomInterfaceEntity != null && sysPopedomInterfaceEntity.getId() != null ){
// flag = true;
// break;
// }
// }
// }
// }
//}
//if(!flag){
// return BaseResult.getFailureMessageEntity("用户无访问权限,请联系管理员");
//}
}
protected <T> T getData(String key, JSONObject jsonObject, Class<T> clz) {
if (checkStr(jsonObject.getString(key))) {
return jsonObject.getJSONObject(key).toJavaObject(clz);

View File

@ -78,7 +78,7 @@ public class EntranceServiceImpl implements IEntranceService {
if (m.getName().equals(serviceMethod.trim())) {
if (m.getName().startsWith("thirdInterface")) {//TODO 后续可能要加强校验规则
logger.info("第三方接口,不校验是否登陆");
}else if (!"doLogin".equals(m.getName())) {
}else if (!"doLogin".equals(m.getName())&& !"appDoLogin".equals(m.getName()) ) {
try {
StpUtil.checkLogin();
//校验当前登陆人是否有权限