From c9f07c1f79e7ea9eb00925975d3ae2c9e8dcbd25 Mon Sep 17 00:00:00 2001 From: nidapeng <jp@doumee.com> Date: 星期三, 20 三月 2024 11:37:34 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/1.0.1' into 1.0.1 --- server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java | 137 +++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 123 insertions(+), 14 deletions(-) diff --git a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java index 2f0c381..822a624 100644 --- a/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java +++ b/server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java @@ -1,5 +1,8 @@ package com.doumee.service.system.impl; +import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.extension.api.R; import com.doumee.config.shiro.ShiroToken; import com.doumee.core.constants.ResponseStatus; @@ -7,15 +10,21 @@ import com.doumee.core.model.LoginUserInfo; import com.doumee.core.utils.Constants; import com.doumee.core.utils.Utils; +import com.doumee.core.wx.WxMiniConfig; import com.doumee.dao.business.SmsEmailMapper; +import com.doumee.dao.system.SystemUserMapper; import com.doumee.dao.system.dto.LoginDTO; import com.doumee.dao.system.dto.LoginPhoneDTO; +import com.doumee.dao.system.dto.WxMiniLoginDTO; import com.doumee.dao.system.model.SystemLoginLog; +import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.impl.SmsEmailServiceImpl; import com.doumee.service.common.CaptchaService; import com.doumee.service.system.SystemLoginLogService; import com.doumee.service.system.SystemLoginService; import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.common.error.WxErrorException; +import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.subject.Subject; @@ -43,8 +52,92 @@ @Autowired private SystemLoginLogService systemLoginLogService; + @Autowired + private SystemUserMapper systemUserMapper; + + +// /** +// * 寰俊鎺堟潈锛堢櫥褰曞悗锛� +// * @param code +// */ +// @Override +// public String wxEmpower(String code,Integer userId){ +// try { +// //鑾峰彇寰俊鏁忔劅鏁版嵁 +// WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(code); +// String openId = session.getOpenid(); +// if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isBlank(openId)) { +// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鑾峰彇openid澶辫触锛佽鑱旂郴绠$悊鍛�"); +// } +// if(Objects.nonNull(userId)){ +// systemUserMapper.update(null,new UpdateWrapper<SystemUser>() +// .lambda() +// .set(SystemUser::getOpenid,null) +// .eq(SystemUser::getOpenid,openId) +// .ne(SystemUser::getId,userId)); +// +// systemUserMapper.update(null,new UpdateWrapper<SystemUser>() +// .lambda() +// .set(SystemUser::getOpenid,openId) +// .eq(SystemUser::getId,userId)); +// } +// return openId; +// } catch (WxErrorException e) { +// throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�"); +// } +// } + @Override - public String loginByPassword(LoginDTO dto, int type,HttpServletRequest request) { + public void cleaOpenid(){ + LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); + if(StringUtils.isNotBlank(loginUserInfo.getOpenid())){ + systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda() + .set(SystemUser::getOpenid,null) + .eq(SystemUser::getId,loginUserInfo.getId())); + } + } + + + @Override + public String loginByWxMini (WxMiniLoginDTO wxMiniLoginDTO, HttpServletRequest request){ + LoginDTO dto = new LoginDTO(); + if(StringUtils.isNotBlank(wxMiniLoginDTO.getCode())){ + try{ + WxMaJscode2SessionResult session = WxMiniConfig.wxMaService.getUserService().getSessionInfo(wxMiniLoginDTO.getCode()); + String openId = session.getOpenid(); + if (StringUtils.isNotBlank(openId)&&StringUtils.isBlank(wxMiniLoginDTO.getUsername())) { + SystemUser systemUser = systemUserMapper.selectOne(new QueryWrapper<SystemUser>() + .lambda().eq(SystemUser::getOpenid,openId) + .eq(SystemUser::getDeleted,Constants.ZERO) + .eq(SystemUser::getType,Constants.UserType.COMPANY.getKey()) + .orderByDesc(SystemUser::getCreateTime) + .last(" limit 1") + ); + if(Objects.nonNull(systemUser)){ + LoginPhoneDTO loginPhoneDTO = new LoginPhoneDTO(); + loginPhoneDTO.setPhone(systemUser.getMobile()); + return this.loginByPhone(loginPhoneDTO,Constants.ONE,false,request); + }else{ + return null; + } + }else{ + dto.setOpenid(openId); + } + } catch (WxErrorException e) { + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"寰俊鐧诲綍寮傚父锛佽鑱旂郴绠$悊鍛�"); + } + } + if(StringUtils.isBlank(wxMiniLoginDTO.getUsername()) + || StringUtils.isBlank(wxMiniLoginDTO.getPassword())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + dto.setUsername(wxMiniLoginDTO.getUsername()); + dto.setPassword(wxMiniLoginDTO.getPassword()); + return this.loginByPassword(dto,Constants.ONE,false,request); + } + + @Override + public String loginByPassword(LoginDTO dto, int type,Boolean checkCaptcha,HttpServletRequest request) { SystemLoginLog loginLog = new SystemLoginLog(); loginLog.setLoginUsername(dto.getUsername()); loginLog.setLoginTime(new Date()); @@ -57,7 +150,7 @@ loginLog.setServerIp(Utils.Server.getIP()); // 鏍¢獙楠岃瘉鐮� try { - if(!debugModel){ + if(!debugModel&&checkCaptcha){ captchaService.check(dto.getUuid(), dto.getCode()); } } catch (Exception e) { @@ -75,6 +168,17 @@ loginLog.setUserId(((LoginUserInfo)subject.getPrincipal()).getId()); loginLog.setSuccess(Boolean.TRUE); systemLoginLogService.create(loginLog); + + //鏇存柊openid鎵�灞炵敤鎴蜂俊鎭� + if(StringUtils.isNotBlank(dto.getOpenid())){ + systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda() + .set(SystemUser::getOpenid,null) + .eq(SystemUser::getOpenid,dto.getOpenid()) + .ne(SystemUser::getId,loginLog.getUserId())); + systemUserMapper.update(null,new UpdateWrapper<SystemUser>().lambda() + .set(SystemUser::getOpenid,dto.getOpenid()) + .eq(SystemUser::getId,loginLog.getUserId())); + } return (String)subject.getSession().getId(); } catch (AuthenticationException e) { log.error(ResponseStatus.ACCOUNT_INCORRECT.getMessage(), e); @@ -84,8 +188,9 @@ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage()); } } + @Override - public String loginByPhone (LoginPhoneDTO dto, int type, HttpServletRequest request) { + public String loginByPhone (LoginPhoneDTO dto, int type,Boolean checkSmsCode, HttpServletRequest request) { SystemLoginLog loginLog = new SystemLoginLog(); loginLog.setLoginUsername(dto.getPhone()); loginLog.setLoginTime(new Date()); @@ -97,18 +202,16 @@ loginLog.setOsInfo(Utils.User_Client.getOS(request)); loginLog.setServerIp(Utils.Server.getIP()); // 鏍¢獙楠岃瘉鐮� - if(type!= Constants.TWO){ - try { - if(!debugModel){ - SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode()); - } - } catch (Exception e) { - log.error(e.getMessage(), e); - loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage()); - loginLog.setSuccess(Boolean.FALSE); - systemLoginLogService.create(loginLog); - throw e; + try { + if(!debugModel&& checkSmsCode){ + SmsEmailServiceImpl.isCaptcheValide(smsEmailMapper,dto.getPhone(), dto.getCode()); } + } catch (Exception e) { + log.error(e.getMessage(), e); + loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage()); + loginLog.setSuccess(Boolean.FALSE); + systemLoginLogService.create(loginLog); + throw e; } // 鏍¢獙鐢ㄦ埛鍚嶅拰瀵嗙爜 Subject subject = SecurityUtils.getSubject(); @@ -127,4 +230,10 @@ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), Objects.isNull(e.getCause())?ResponseStatus.ACCOUNT_INCORRECT.getMessage():e.getCause().getMessage()); } } + + + + + + } -- Gitblit v1.9.3