k94314517
2024-03-18 94c670060fb681b4e7262989bdea9748f03fb93c
git ch
已修改8个文件
123 ■■■■ 文件已修改
server/company/src/main/java/com/doumee/api/system/SystemController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/config/shiro/ShiroConfig.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/system/dto/LoginDTO.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/system/model/SystemUser.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/system/SystemLoginService.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/shop/src/main/java/com/doumee/api/system/SystemController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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 () {