Browse Source

1、登录接口添加

master
Aug 5 months ago
parent
commit
517132e03b
5 changed files with 356 additions and 0 deletions
  1. +21
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/service/AppletLoginService.java
  2. +232
    -0
      jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/service/impl/AppletLoginServiceImpl.java
  3. +49
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/carrentController/LoginApiController.java
  4. +15
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/LoginApiService.java
  5. +39
    -0
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/LoginApiServiceImpl.java

+ 21
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/service/AppletLoginService.java View File

@ -0,0 +1,21 @@
package org.jeecg.modules.service;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.bean.LoginReq;
public interface AppletLoginService {
/**
* 微信小程序登录接口
* @param loginReq
* @return
*/
Result<Object> appletLogin(LoginReq loginReq);
// /**
// * 微信小程序登录绑定手机号码接口
// * @param loginReq
// * @return
// */
// Result<Object> bindPhone(LoginReq loginReq);
}

+ 232
- 0
jeecg-boot-base/jeecg-boot-base-core/src/main/java/org/jeecg/modules/service/impl/AppletLoginServiceImpl.java View File

@ -0,0 +1,232 @@
package org.jeecg.modules.service.impl;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;
import org.jeecg.common.api.vo.Result;
import org.jeecg.common.constant.CommonConstant;
import org.jeecg.common.exception.JeecgBootException;
import org.jeecg.common.system.util.JwtUtil;
import org.jeecg.common.util.RedisUtil;
import org.jeecg.modules.bean.HttpConf;
import org.jeecg.modules.bean.LoginReq;
import org.jeecg.modules.hanHaiMember.entity.HanHaiMember;
import org.jeecg.modules.hanHaiMember.service.IHanHaiMemberService;
import org.jeecg.modules.service.AppletLoginService;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@Service
public class AppletLoginServiceImpl implements AppletLoginService {
//微信小程序appid(老环卫)
private static final String mpAppId = "wx1c95690b8180a150";
//微信小程序appSecret(老环卫)
private static final String mpAppSecret = "7a686fb5308cca9ac0bc8cab14130cee";
@Resource
private IHanHaiMemberService memberService;
@Resource
private RedisUtil redisUtil;
@Resource
private HttpConf httpConf;
/**
* 微信小程序登录接口
* @param loginReq
* @return
*/
@Transactional(rollbackFor = {Exception.class})
public Result<Object> appletLogin(LoginReq loginReq) {
Result<Object> result = new Result<>();
Map<String, Object> map = new HashMap<>();
if (StringUtils.isBlank(loginReq.getCode())) {
throw new JeecgBootException("小程序code为空");
}
String loginUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + mpAppId + "&secret=" + mpAppSecret+ "&js_code=" + loginReq.getCode() + "&grant_type=authorization_code";
//使用工具类
JSONObject json_test = httpConf.getJSONObject(loginUrl);
String wxOpenid = json_test.getString("openid");
String sessionKey = json_test.getString("session_key");
if (StringUtils.isBlank(wxOpenid)) {
throw new JeecgBootException("未获取到openid");
}
HanHaiMember member = memberService.lambdaQuery().eq(HanHaiMember::getAppletOpenid,wxOpenid).one();
if (member == null) {
//如果user等于null说明该用户第一次登录数据库没有该用户信息
loginReq.setOpenid(wxOpenid);
loginReq.setSession_key(sessionKey);
member = new HanHaiMember();
// member.setSesssionKey(sessionKey);
member.setAppletOpenid(wxOpenid);
member.setNickName(loginReq.getNickName());
member.setHeadImage(loginReq.getHeadimgurl());
// 生成token返回给小程序端
String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid);
memberService.save(member);
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
// 设置超时时间
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100);
map.put("userInfo", member);
map.put("token", token);
result.setCode(200);
result.setResult(map);
return result;
} else {
// member.setHeadImage(loginReq.getHeadimgurl());
// member.setSessionKey(sessionKey);
// memberService.saveOrUpdate(member);
// 生成token返回给小程序端
String token = JwtUtil.sign(member.getAppletOpenid(), wxOpenid);
redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
// 设置超时时间
redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 100);
map.put("userInfo", member);
map.put("token", token);
//用户id做im账号
result.setResult(map);
result.setCode(200);
// result.setMessage(member.getNickName()+"已于"+member.getCreateTime()+"注册成功!请勿重复注册!");
// // 未绑定手机号跳转授权绑定手机号
// if (StringUtils.isBlank(member.getPhone())) {
// result.setMessage("该微信用户尚未绑定手机号,请授权手机进行绑定");
// result.setCode(905);
// result.setResult(map);
// return result;
// }
}
return result;
}
// /**
// * 微信小程序登录绑定手机号码接口
// * @param loginReq
// * @return
// */
// @Transactional(rollbackFor = Exception.class)
// @Override
// public Result<Object> bindPhone(LoginReq loginReq) {
// Result<Object> result = new Result<>();
// if (StringUtils.isEmpty(loginReq.getEncryptedData())) {
// result.setCode(500);
// result.setMessage("请授权手机号");
// return result;
// }
// String loginUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=" + mpAppId + "&secret=" + mpAppSecret+ "&js_code=" + loginReq.getCode() + "&grant_type=authorization_code";
// CloseableHttpClient client = null;
// CloseableHttpResponse response = null;
// try {
// // 创建http GET请求
// HttpGet httpGet = new HttpGet(loginUrl);
// client = HttpClients.createDefault();
// // 执行请求
// response = client.execute(httpGet);
// HttpEntity entity = response.getEntity();//得到返回数据
// String resultStr = EntityUtils.toString(entity);
// JSONObject json_test = JSONObject.parseObject(resultStr);
// String wxOpenid = json_test.getString("openid");
// if (StringUtils.isEmpty(wxOpenid)) {
// return result.error500("未获取到openid");
// }
// String sessionKey = json_test.getString("session_key");
// // 保存sessionKey,用于解析手机号码
// loginReq.setOpenid(wxOpenid);
// loginReq.setSession_key(sessionKey);
// String userPhone = getPhoneNumber(loginReq);
// HanHaiMember one = memberService.lambdaQuery().eq(HanHaiMember::getAppletOpenid, wxOpenid).one();
// if(one!=null){
// return result.OK("请不要重复注册");
// }
// HanHaiMember member = new HanHaiMember();
// member.setSessionKey(sessionKey);
// member.setAppletOpenid(wxOpenid);
// member.setNickName(loginReq.getNickName());
// member.setHeadImage(loginReq.getHeadimgurl());
// member.setPhone(userPhone);
//
//
// //判断用户是否存在
// HanHaiMember boolOne = memberService.lambdaQuery().eq(HanHaiMember::getAccount, loginReq.geta()).one();
// boolean bool = false;
// if(one != null){
// bool = true;
// }
//
// if(!bool){
// member.setId(boolOne.getId());
// memberService.updateById(member);
// }else{
// memberService.save(member);
// }
//
//
//
// return result.OK("注册成功",member);
// }catch(Exception e) {
// e.printStackTrace();
// return Result.error("操作失败,请联系系统管理员!");
// }
//
// }
//
//
//
// /**
// * 解析电话号码
// * @param loginReq
// * @return
// */
// public String getPhoneNumber(LoginReq loginReq) {
// String encryptedData = loginReq.getEncryptedData();
// String session_key = loginReq.getSession_key();
// String iv = loginReq.getIv();
// // 被加密的数据
// byte[] dataByte = Base64.decodeBase64(encryptedData);
// // 加密秘钥
// byte[] keyByte = Base64.decodeBase64(session_key);
// // 偏移量
// byte[] ivByte = Base64.decodeBase64(iv);
// try {
// // 如果密钥不足16位那么就补足. 这个if 中的内容很重要
// int base = 16;
// if (keyByte.length % base != 0) {
// int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
// byte[] temp = new byte[groups * base];
// Arrays.fill(temp, (byte) 0);
// System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
// keyByte = temp;
// }
// // 初始化
// Security.addProvider(new BouncyCastleProvider());
// Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding", "BC");
// SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
// AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
// parameters.init(new IvParameterSpec(ivByte));
// cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化
// byte[] resultByte = cipher.doFinal(dataByte);
// if (null != resultByte && resultByte.length > 0) {
// String result = new String(resultByte, "UTF-8");
// JSONObject userPhoneObj = JSONObject.parseObject(result);
// Map<String, Object> userMap = new HashMap<>();
// for (Map.Entry<String, Object> entry : userPhoneObj.entrySet()) {
// userMap.put(entry.getKey(), entry.getValue());
// }
// // 获取phoneNumber 带区号
// String userPhone = (String) userMap.get("phoneNumber");
// return userPhone;
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// return null;
// }
}

+ 49
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/api/carrentController/LoginApiController.java View File

@ -0,0 +1,49 @@
package org.jeecg.modules.api.carrentController;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.apiService.LoginApiService;
import org.jeecg.modules.bean.LoginReq;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@Api(tags="小程序-登录相关接口")
@RestController
@RequestMapping("/api/login")
@Slf4j
public class LoginApiController {
//授权登录
@Resource
private LoginApiService loginApiService;
//小程序授权登录
@ApiOperation(value="小程序-登录接口", notes="小程序-登录接口")
@GetMapping("/login")
public Result<?> login(LoginReq loginReq){
return loginApiService.login(loginReq);
}
//获取用户协议
@ApiOperation(value="小程序-获取用户协议", notes="小程序-获取用户协议")
@GetMapping("/getUserAgreement")
public Result<?> getUserAgreement(){
return loginApiService.getUserAgreement();
}
//获取隐私政策
@ApiOperation(value="小程序-获取隐私政策", notes="小程序-获取隐私政策")
@GetMapping("/getPrivacyPolicy")
public Result<?> getPrivacyPolicy(){
return loginApiService.getPrivacyPolicy();
}
}

+ 15
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/LoginApiService.java View File

@ -0,0 +1,15 @@
package org.jeecg.modules.apiService;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.bean.LoginReq;
public interface LoginApiService {
//小程序-登录接口
Result<?> login(LoginReq loginReq);
//获取用户协议
Result<?> getUserAgreement();
//获取隐私政策
Result<?> getPrivacyPolicy();
}

+ 39
- 0
jeecg-boot-module-system/src/main/java/org/jeecg/modules/apiService/impl/LoginApiServiceImpl.java View File

@ -0,0 +1,39 @@
package org.jeecg.modules.apiService.impl;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.apiService.LoginApiService;
import org.jeecg.modules.bean.LoginReq;
import org.jeecg.modules.service.AppletLoginService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@Service
public class LoginApiServiceImpl implements LoginApiService {
@Resource
private AppletLoginService appletLoginService;
//小程序-登录接口
@Override
public Result<?> login(LoginReq loginReq)
{
return appletLoginService.appletLogin(loginReq);
}
//小程序-获取用户协议
@Override
public Result<?> getUserAgreement()
{
return Result.OK("用户协议");
}
//获取隐私政策
@Override
public Result<?> getPrivacyPolicy()
{
return Result.OK("隐私政策");
}
}

Loading…
Cancel
Save