diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java index 754f57b5..6771b11c 100644 --- a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/RemoteUserService.java @@ -25,4 +25,12 @@ public interface RemoteUserService { * @return 结果 */ Boolean registerUserInfo(SysUser sysUser); + + /** + * 检查用户名是否唯一 + * + * @param username 用户名 + * @return 结果 + */ + String checkUserNameUnique(String username); } diff --git a/ruoyi-auth/pom.xml b/ruoyi-auth/pom.xml index 9e2ccbec..791b0c3e 100644 --- a/ruoyi-auth/pom.xml +++ b/ruoyi-auth/pom.xml @@ -11,7 +11,7 @@ ruoyi-auth - ruoyi-auth认证授权中心 + ruoyi-auth 认证授权中心 @@ -46,6 +46,12 @@ ruoyi-common-security + + + com.ruoyi + ruoyi-common-swagger + + com.ruoyi ruoyi-common-web diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index febd0d65..96c1649a 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -9,29 +9,34 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.enums.DeviceType; import com.ruoyi.common.satoken.utils.LoginHelper; import com.ruoyi.system.api.model.LoginUser; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; -import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; /** * token 控制 * - * @author ruoyi + * @author Lion Li */ +@Validated +@Api(value = "认证鉴权控制器", tags = {"认证鉴权管理"}) @RequiredArgsConstructor @RestController public class TokenController { private final SysLoginService sysLoginService; + @ApiOperation("登录方法") @PostMapping("login") - public R login(@RequestBody LoginBody form) { + public R> login(@Validated @RequestBody LoginBody form) { // 用户登录 LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); // 获取登录token @@ -42,19 +47,23 @@ public class TokenController { return R.ok(rspMap); } + @ApiOperation("登出方法") @DeleteMapping("logout") - public R logout(HttpServletRequest request) { + public R logout() { try { StpUtil.logout(); + sysLoginService.logout(LoginHelper.getUsername()); } catch (NotLoginException e) { } return R.ok(); } + @ApiOperation("用户注册") @PostMapping("register") - public R register(@RequestBody RegisterBody registerBody) { + public R register(@RequestBody RegisterBody registerBody) { // 用户注册 - sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); + sysLoginService.register(registerBody); return R.ok(); } + } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java index e20a3049..852aef62 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/LoginBody.java @@ -1,26 +1,38 @@ package com.ruoyi.auth.form; +import com.ruoyi.common.core.constant.UserConstants; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; -import lombok.experimental.Accessors; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotBlank; /** * 用户登录对象 * - * @author ruoyi + * @author Lion Li */ @Data @NoArgsConstructor +@ApiModel("用户登录对象") public class LoginBody { /** * 用户名 */ + @NotBlank(message = "用户名不能为空") + @Length(min = UserConstants.USERNAME_MIN_LENGTH, max = UserConstants.USERNAME_MAX_LENGTH, message = "账户长度必须在2到20个字符之间") + @ApiModelProperty(value = "用户名") private String username; /** * 用户密码 */ + @NotBlank(message = "密码不能为空") + @Length(min = UserConstants.PASSWORD_MIN_LENGTH, max = UserConstants.PASSWORD_MAX_LENGTH, message = "密码长度必须在5到20个字符之间") + @ApiModelProperty(value = "用户密码") private String password; } diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/form/RegisterBody.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/RegisterBody.java index 3001037c..ed74d223 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/form/RegisterBody.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/form/RegisterBody.java @@ -1,10 +1,21 @@ -package com.ruoyi.auth.form; - -/** - * 用户注册对象 - * - * @author ruoyi - */ -public class RegisterBody extends LoginBody { - -} +package com.ruoyi.auth.form; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * 用户注册对象 + * + * @author Lion Li + */ +@Data +@EqualsAndHashCode(callSuper = true) +@ApiModel("用户注册对象") +public class RegisterBody extends LoginBody { + + @ApiModelProperty(value = "用户类型") + private String userType; + +} diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java index 7ab9ade6..bdb0434d 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/service/SysLoginService.java @@ -2,9 +2,11 @@ package com.ruoyi.auth.service; import cn.dev33.satoken.secure.BCrypt; import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.auth.form.RegisterBody; import com.ruoyi.common.core.constant.CacheConstants; import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.UserConstants; +import com.ruoyi.common.core.enums.UserType; import com.ruoyi.common.core.exception.ServiceException; import com.ruoyi.common.core.utils.ServletUtils; import com.ruoyi.common.core.utils.StringUtils; @@ -106,27 +108,25 @@ public class SysLoginService { /** * 注册 */ - public void register(String username, String password) { - // 用户名或密码为空 错误 - if (StringUtils.isAnyBlank(username, password)) { - throw new ServiceException("用户/密码必须填写"); - } - if (username.length() < UserConstants.USERNAME_MIN_LENGTH - || username.length() > UserConstants.USERNAME_MAX_LENGTH) { - throw new ServiceException("账户长度必须在2到20个字符之间"); - } - if (password.length() < UserConstants.PASSWORD_MIN_LENGTH - || password.length() > UserConstants.PASSWORD_MAX_LENGTH) { - throw new ServiceException("密码长度必须在5到20个字符之间"); - } + public void register(RegisterBody registerBody) { + String username = registerBody.getUsername(); + String password = registerBody.getPassword(); + // 校验用户类型是否存在 + String userType = UserType.getUserType(registerBody.getUserType()).getUserType(); + if (UserConstants.NOT_UNIQUE.equals(remoteUserService.checkUserNameUnique(username))) { + throw new ServiceException("保存用户 " + username + " 失败,注册账号已存在"); + } // 注册用户信息 SysUser sysUser = new SysUser(); sysUser.setUserName(username); sysUser.setNickName(username); sysUser.setPassword(BCrypt.hashpw(password)); - remoteUserService.registerUserInfo(sysUser); - + sysUser.setUserType(userType); + boolean regFlag = remoteUserService.registerUserInfo(sysUser); + if (!regFlag) { + throw new ServiceException("注册失败,请联系系统管理人员"); + } recordLogininfor(username, Constants.REGISTER, "注册成功"); } diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteUserServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteUserServiceImpl.java index 05bd0484..5a0fa081 100644 --- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteUserServiceImpl.java +++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/dubbo/RemoteUserServiceImpl.java @@ -2,7 +2,6 @@ package com.ruoyi.system.dubbo; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; -import com.ruoyi.common.core.constant.Constants; import com.ruoyi.common.core.constant.UserConstants; import com.ruoyi.common.core.enums.UserStatus; import com.ruoyi.common.core.exception.ServiceException; @@ -75,4 +74,9 @@ public class RemoteUserServiceImpl implements RemoteUserService { } return userService.registerUser(sysUser); } + + @Override + public String checkUserNameUnique(String username) { + return userService.checkUserNameUnique(username); + } } diff --git a/ruoyi-visual/ruoyi-doc/src/main/resources/application.yml b/ruoyi-visual/ruoyi-doc/src/main/resources/application.yml index 40ea6b91..a3416392 100644 --- a/ruoyi-visual/ruoyi-doc/src/main/resources/application.yml +++ b/ruoyi-visual/ruoyi-doc/src/main/resources/application.yml @@ -18,3 +18,6 @@ knife4j: - name: 资源服务 uri: ${knife4j.cloud.gatewayUri} location: /resource/v2/api-docs + - name: 认证服务 + uri: ${knife4j.cloud.gatewayUri} + location: /auth/v2/api-docs