diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysLoginController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysLoginController.java index 6300ff2..c375bd4 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysLoginController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/SysLoginController.java @@ -86,7 +86,7 @@ public class SysLoginController rabbitTemplate.convertAndSend(QueueConstants.CODE_QUEUE,s); - return AjaxResult.success(); + return AjaxResult.success(s); } diff --git a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/WXController.java b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/WXController.java index 8c87da4..ad56cbf 100644 --- a/mcwl-admin/src/main/java/com/mcwl/web/controller/system/WXController.java +++ b/mcwl-admin/src/main/java/com/mcwl/web/controller/system/WXController.java @@ -6,13 +6,17 @@ import com.mcwl.common.core.domain.AjaxResult; import com.mcwl.common.core.domain.entity.SysUser; import com.mcwl.common.core.domain.model.LoginUser; import com.mcwl.common.core.redis.RedisCache; +import com.mcwl.common.utils.StringUtils; import com.mcwl.common.utils.uuid.IdUtils; import com.mcwl.framework.web.service.SysPermissionService; import com.mcwl.framework.web.service.TokenService; import com.mcwl.system.domain.SysUserThirdAccount; +import com.mcwl.system.service.ISysUserService; import com.mcwl.system.service.ISysUserThirdAccountService; import com.mcwl.system.service.IWXService; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -30,6 +34,7 @@ import java.util.concurrent.TimeUnit; * @apiNote */ +@Slf4j @RestController @RequestMapping("/wx") public class WXController { @@ -37,6 +42,12 @@ public class WXController { @Autowired private RedisCache redisCache; + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private ISysUserService iSysUserService; + @Resource private ISysUserThirdAccountService iSysUserThirdAccountService; @@ -49,7 +60,6 @@ public class WXController { @Resource private SysPermissionService permissionService; - /** * 扫码登录用uuid生成 */ @@ -91,17 +101,21 @@ public class WXController { @Anonymous @GetMapping("/uuid/login") public AjaxResult loginByOpenId(@RequestParam("uuid") String uuid) throws IOException { + AjaxResult ajax = AjaxResult.success(); String verifyKey = CacheConstants.WX_OPENID_KEY + uuid; - String openid = redisCache.getCacheObject(verifyKey); +// String openid = redisCache.getCacheObject(verifyKey); + String openid = redisTemplate.opsForValue().get(verifyKey); ajax.put("status", 0); System.out.println("openid:{}" + openid); - if (openid != null) { + if (!StringUtils.isEmpty(openid)) { + redisTemplate.delete(verifyKey); SysUser user = iSysUserThirdAccountService.selectUserByOpenId(openid); System.out.println("用户:{}" + user); - if (user == null) { - System.out.println("用户不存在"); - return AjaxResult.error("用户不存在"); + if (user.getUserId() == null) { + + iSysUserService.addUser(openid,CacheConstants.WE_CHAT,null); + user = iSysUserThirdAccountService.selectUserByOpenId(openid); } LoginUser loginUser = new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user)); // 生成token diff --git a/mcwl-admin/src/main/resources/application-druid.yml b/mcwl-admin/src/main/resources/application-druid.yml index fccb2a3..5f3b9b8 100644 --- a/mcwl-admin/src/main/resources/application-druid.yml +++ b/mcwl-admin/src/main/resources/application-druid.yml @@ -83,22 +83,3 @@ wechat: appid: wx82d4c3c96f0ffa5b # 应用密钥 secret: abbabcf1da711a3bbd95387ec83edcac - -mybatis-plus: - # Mapper XML文件位置 - mapper-locations: classpath:mapper/**/*.xml - # 配置实体类所在的包名,MyBatis-Plus会自动扫描并注册为别名 - type-aliases-package: com.mcwl.**.mapper - # 全局配置 - global-config: - db-config: - # 主键生成策略 - id-type: auto - # 开启驼峰命名规则转换 - capital-mode: true - # 配置逻辑删除相关属性 - logic-delete-field: del_flag - logic-delete-value: '2' - logic-not-delete-value: '0' - # 数据库字段下划线命名规则 - table-underline: true diff --git a/mcwl-framework/src/main/java/com/mcwl/framework/web/service/SysLoginService.java b/mcwl-framework/src/main/java/com/mcwl/framework/web/service/SysLoginService.java index 9020493..2f5923c 100644 --- a/mcwl-framework/src/main/java/com/mcwl/framework/web/service/SysLoginService.java +++ b/mcwl-framework/src/main/java/com/mcwl/framework/web/service/SysLoginService.java @@ -21,6 +21,7 @@ import com.mcwl.framework.security.context.AuthenticationContextHolder; import com.mcwl.framework.security.sms.SmsCodeAuthenticationToken; import com.mcwl.system.service.ISysConfigService; import com.mcwl.system.service.ISysUserService; +import com.mcwl.system.service.impl.SysUserServiceImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -60,6 +61,9 @@ public class SysLoginService @Autowired private ISysConfigService configService; + @Autowired + private SysUserServiceImpl sysUserService; + /** * 登录验证 * @@ -195,7 +199,10 @@ public class SysLoginService //根据手机号查询数据 SysUser sysUser = userService.selectUserByPhone(phone); if (sysUser == null){ - throw new UserNotExistsException(); + + //注册数据 + sysUserService.addUser(null,null,phone); + sysUser = userService.selectUserByPhone(phone); } // 登录前置校验 diff --git a/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserService.java b/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserService.java index d819f35..cce0eaa 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserService.java +++ b/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserService.java @@ -207,4 +207,5 @@ public interface ISysUserService SysUser selectUserByPhone(String phone); + void addUser(String openid,String type,String phone); } diff --git a/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserThirdAccountService.java b/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserThirdAccountService.java index 91230cc..23bcde2 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserThirdAccountService.java +++ b/mcwl-system/src/main/java/com/mcwl/system/service/ISysUserThirdAccountService.java @@ -1,6 +1,7 @@ package com.mcwl.system.service; import com.mcwl.common.core.domain.entity.SysUser; +import com.mcwl.system.domain.SysUserThirdAccount; /** * 第三方登录表 @@ -12,4 +13,6 @@ import com.mcwl.common.core.domain.entity.SysUser; public interface ISysUserThirdAccountService { SysUser selectUserByOpenId(String openid); + void add(SysUserThirdAccount sysUserThirdAccount); + } diff --git a/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserServiceImpl.java b/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserServiceImpl.java index 153ddcf..e505698 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserServiceImpl.java +++ b/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserServiceImpl.java @@ -12,10 +12,12 @@ import com.mcwl.common.utils.spring.SpringUtils; import com.mcwl.system.domain.SysPost; import com.mcwl.system.domain.SysUserPost; import com.mcwl.system.domain.SysUserRole; +import com.mcwl.system.domain.SysUserThirdAccount; import com.mcwl.system.mapper.*; import com.mcwl.system.service.ISysConfigService; import com.mcwl.system.service.ISysDeptService; import com.mcwl.system.service.ISysUserService; +import com.mcwl.system.service.ISysUserThirdAccountService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +26,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import javax.validation.Validator; +import java.security.SecureRandom; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -62,6 +65,16 @@ public class SysUserServiceImpl implements ISysUserService @Autowired protected Validator validator; + @Autowired + private ISysUserThirdAccountService iSysUserThirdAccountService; + + private static final String UPPER_CASE_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private static final String LOWER_CASE_LETTERS = "abcdefghijklmnopqrstuvwxyz"; + private static final String DIGITS = "0123456789"; + // private static final String SPECIAL_CHARACTERS = "!@#$%^&*()-_=+[]{}|;:,.<>?"; + private static final String ALL_CHARACTERS = UPPER_CASE_LETTERS + LOWER_CASE_LETTERS + DIGITS; + private static final SecureRandom random = new SecureRandom(); + /** * 根据条件分页查询用户列表 * @@ -550,4 +563,46 @@ public class SysUserServiceImpl implements ISysUserService return userMapper.selectUserByPhone(phone); } + + @Override + public void addUser(String openid,String type,String phone) { + + //初始化一个用户信息 + SysUser sysUser = new SysUser(); + sysUser.setUserName("默认用户:"+ generateRandomPassword(8)); + sysUser.setNickName("用户:" + generateRandomPassword(8)); + sysUser.setPassword(SecurityUtils.encryptPassword(generateRandomPassword(10))); + sysUser.setPhonenumber(phone); + sysUser.setRoleIds(new Long[]{2L}); + + //新增用户 + insertUser(sysUser); + + if (openid != null){ + SysUserThirdAccount sysUserThirdAccount = SysUserThirdAccount.builder().userId(sysUser.getUserId()) + .bindType(type) + .openid(openid.substring(1, openid.length() - 1)).build(); + iSysUserThirdAccountService.add(sysUserThirdAccount); + } + + } + + /** + * 生成随机密码 + * @param length + * @return + */ + public static String generateRandomPassword(int length) { + if (length < 1) { + throw new IllegalArgumentException("Password length must be at least 1"); + } + + StringBuilder sb = new StringBuilder(length); + for (int i = 0; i < length; i++) { + int randomIndex = random.nextInt(ALL_CHARACTERS.length()); + sb.append(ALL_CHARACTERS.charAt(randomIndex)); + } + + return sb.toString(); + } } diff --git a/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserThirdAccountServiceImpl.java b/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserThirdAccountServiceImpl.java index b9a46d2..88cee25 100644 --- a/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserThirdAccountServiceImpl.java +++ b/mcwl-system/src/main/java/com/mcwl/system/service/impl/SysUserThirdAccountServiceImpl.java @@ -47,4 +47,11 @@ public class SysUserThirdAccountServiceImpl implements ISysUserThirdAccountServi return sysUserService.selectUserById(sysUserThirdAccount.getUserId()); } + @Override + public void add(SysUserThirdAccount sysUserThirdAccount) { + + //添加第三方登录权限 + sysUserThirdAccountMapper.insert(sysUserThirdAccount); + } + }