server/company/src/main/java/com/doumee/api/system/SystemController.java
@@ -53,7 +53,6 @@ return ApiResponse.success(systemLoginService.loginByPhone(dto, Constants.ONE, true, request)); } @PreventRepeat(limit = 10, lockTime = 10000) @ApiOperation("微信小程序登录") @PostMapping("/loginByWxMini") @@ -61,16 +60,10 @@ return ApiResponse.success(systemLoginService.loginByWxMini(dto, request)); } @ApiOperation(value = "授权openId",notes = "登录后") @GetMapping("/wxEmpower") public ApiResponse<String> wxEmpower (@RequestParam String code, HttpServletRequest request) { LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); return ApiResponse.success(systemLoginService.wxEmpower(code, loginUserInfo.getId())); } @ApiOperation("退出登录") @PostMapping("/logout") public ApiResponse logout () { systemLoginService.cleaOpenid(); Subject subject = SecurityUtils.getSubject(); subject.logout(); return ApiResponse.success(null); server/service/src/main/java/com/doumee/config/shiro/ShiroConfig.java
@@ -90,6 +90,7 @@ // 路径拦截配置 map.put("/system/login", "anon"); map.put("/system/loginByPhone", "anon"); map.put("/system/loginByWxMini", "anon"); map.put("/system/logout", "anon"); map.put("/common/captcha", "anon"); map.put("/business/smsEmail/sendSms", "anon"); server/service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java
@@ -31,4 +31,7 @@ @ApiModelProperty(value = "验证码UUID") private String uuid; @ApiModelProperty(value = "openid",hidden = true) private String openid; } server/service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
@@ -21,5 +21,4 @@ @NotBlank(message = "验证码不能为空") @ApiModelProperty(value = "验证码") private String code; } server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java
@@ -73,9 +73,6 @@ @ApiModelProperty(value = "密码") @NotBlank(message = "初始密码不能为空") private String password; @ApiModelProperty(value = "openid") @NotBlank(message = "openid") private String openid; @ApiModelProperty(value = "盐") private String salt; server/service/src/main/java/com/doumee/service/system/SystemLoginService.java
@@ -22,18 +22,12 @@ String loginByPhone (LoginPhoneDTO dto, int type,Boolean checkSmsCode, HttpServletRequest request); /** * 微信授权 * @param code * @param userId * @return */ String wxEmpower(String code,Integer userId); /** * * @param wxMiniLoginDTO * @param request * @return */ String loginByWxMini (WxMiniLoginDTO wxMiniLoginDTO, HttpServletRequest request); void cleaOpenid(); } server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -56,39 +56,49 @@ 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)); // /** // * 微信授权(登录后) // * @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(),"微信登录异常!请联系管理员"); // } // } 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 void cleaOpenid(){ LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 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()); @@ -102,10 +112,14 @@ .last(" limit 1") ); if(Objects.nonNull(systemUser)){ LoginPhoneDTO dto = new LoginPhoneDTO(); dto.setPhone(systemUser.getMobile()); return this.loginByPhone(dto,Constants.ZERO,false,request); 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(),"微信登录异常!请联系管理员"); @@ -115,7 +129,6 @@ || StringUtils.isBlank(wxMiniLoginDTO.getPassword())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } LoginDTO dto = new LoginDTO(); dto.setUsername(wxMiniLoginDTO.getUsername()); dto.setPassword(wxMiniLoginDTO.getPassword()); return this.loginByPassword(dto,Constants.ONE,false,request); @@ -153,6 +166,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); server/shop/src/main/java/com/doumee/api/system/SystemController.java
@@ -7,10 +7,7 @@ import com.doumee.core.model.ApiResponse; import com.doumee.core.model.LoginUserInfo; import com.doumee.core.utils.Constants; import com.doumee.dao.system.dto.LoginDTO; import com.doumee.dao.system.dto.LoginPhoneDTO; import com.doumee.dao.system.dto.UpdatePwdDto; import com.doumee.dao.system.dto.WebLoginDTO; import com.doumee.dao.system.dto.*; import com.doumee.service.system.SystemLoginService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -46,17 +43,18 @@ @ApiOperation("登录 - 后端") @PostMapping("/login") public ApiResponse<String> login (@Validated @RequestBody LoginDTO dto, HttpServletRequest request) { return ApiResponse.success(systemLoginService.loginByPassword(dto, Constants.TWO, request)); return ApiResponse.success(systemLoginService.loginByPassword(dto, Constants.TWO,true, request)); } @PreventRepeat(limit = 10, lockTime = 10000) @ApiOperation("短信验证码登录") @PostMapping("/loginByPhone") public ApiResponse<String> loginByPhone (@Validated @RequestBody LoginPhoneDTO dto, HttpServletRequest request) { return ApiResponse.success(systemLoginService.loginByPhone(dto, Constants.TWO, request)); return ApiResponse.success(systemLoginService.loginByPhone(dto, Constants.TWO,true, request)); } @ApiOperation("退出登录") @PostMapping("/logout") public ApiResponse logout () {