From 08d48aac2b31d1a8b9ff7bd74fafb6ffe810fc01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=AB=98=E9=9B=84?= Date: Tue, 27 May 2025 14:17:12 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E7=99=BB=E9=99=86=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E5=AE=8C=E6=88=90=202=E3=80=81=E5=85=A8=E5=B1=80=E5=BC=80?= =?UTF-8?q?=E5=90=AF=E7=99=BB=E5=BD=95=E9=AA=8C=E8=AF=81=203=E3=80=81?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=90=8E=EF=BC=8C=E8=8E=B7=E5=8F=96=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3=EF=BC=8C=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=8F=9C=E5=8D=95=E6=8E=A5=E5=8F=A3=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/dite/znpt/config/WebMvcConfig.java | 14 +-- .../com/dite/znpt/constant/Constants.java | 41 ++++-- .../{LoginService.java => AuthService.java} | 4 +- .../znpt/service/impl/AuthServiceImpl.java | 119 ++++++++++++++++++ .../znpt/service/impl/DeptServiceImpl.java | 4 + .../znpt/service/impl/LoginServiceImpl.java | 82 ------------ .../znpt/service/impl/MenuServiceImpl.java | 5 +- .../service/impl/UserPostServiceImpl.java | 3 + .../service/impl/UserRoleServiceImpl.java | 3 + .../znpt/web/controller/AuthController.java | 55 ++++++++ .../znpt/web/controller/LoginController.java | 39 ------ 11 files changed, 231 insertions(+), 138 deletions(-) rename core/src/main/java/com/dite/znpt/service/{LoginService.java => AuthService.java} (85%) create mode 100644 core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java delete mode 100644 core/src/main/java/com/dite/znpt/service/impl/LoginServiceImpl.java create mode 100644 web/src/main/java/com/dite/znpt/web/controller/AuthController.java delete mode 100644 web/src/main/java/com/dite/znpt/web/controller/LoginController.java diff --git a/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java b/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java index d87716b..9cbae0f 100644 --- a/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java +++ b/core/src/main/java/com/dite/znpt/config/WebMvcConfig.java @@ -41,18 +41,18 @@ public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { // 注册 Sa-Token 拦截器,定义详细认证规则 -// registry.addInterceptor(new SaInterceptor(handler -> { -// SaRouter -// .match("/**") // 拦截的 path 列表,可以写多个 */ -// .notMatch(excludePaths()) -// .check(r -> StpUtil.checkLogin()); -// })).addPathPatterns("/**"); + registry.addInterceptor(new SaInterceptor(handler -> { + SaRouter + .match("/**") // 拦截的 path 列表,可以写多个 */ + .notMatch(excludePaths()) + .check(r -> StpUtil.checkLogin()); + })).addPathPatterns("/**"); } // 动态获取哪些 path 可以忽略鉴权 public List excludePaths() { // 此处仅为示例,实际项目你可以写任意代码来查询这些path - return Arrays.asList("/login", "/favicon.ico", "/favicon.ico", "/doc.html", "/swagger-ui/**", "/swagger-resources","/webjars/**", "/v3/api-docs/**", "/**/v3/api-docs", "/static/image/**","/static/image/temp/**"); + return Arrays.asList("/auth/login", "/favicon.ico", "/favicon.ico", "/doc.html", "/swagger-ui/**", "/swagger-resources","/webjars/**", "/v3/api-docs/**", "/**/v3/api-docs", "/static/image/**","/static/image/temp/**"); } } diff --git a/core/src/main/java/com/dite/znpt/constant/Constants.java b/core/src/main/java/com/dite/znpt/constant/Constants.java index e5364f1..38b7a02 100644 --- a/core/src/main/java/com/dite/znpt/constant/Constants.java +++ b/core/src/main/java/com/dite/znpt/constant/Constants.java @@ -15,33 +15,48 @@ public class Constants { */ public static final String SERVICE_EXCEPTION = "000002"; + /** + * 参数异常 + */ + public static final String PARAMETER_EXCEPTION = "000003"; + public static final String SERVICE_EXCEPTION_MESSAGE = "服务开小差,请稍后再试!"; /** * 账号密码错误 */ - public static final String PASSWORD_ERROR_EXCEPTION = "500000"; + public static final String ACCOUNT_ERROR_EXCEPTION = "500000"; + + public static final String ACCOUNT_ERROR_EXCEPTION_MESSAGE = "用户名或者密码错误!"; + + /** + * 账号密码错误 + */ + public static final String PASSWORD_ERROR_EXCEPTION = "500001"; public static final String PASSWORD_ERROR_EXCEPTION_MESSAGE = "用户名或者密码错误!"; + + /** + * 账号密码错误 + */ + public static final String PASSWORD_EXCEPTION = "500002"; + + public static final String PASSWORD_EXCEPTION_MESSAGE = "用户名或者密码错误!"; + /** * 账号停用 */ - public static final String USER_DISABLE_EXCEPTION = "500001"; + public static final String USER_DISABLE_EXCEPTION = "500100"; public static final String USER_DISABLE_EXCEPTION_MESSAGE = "用户已停用!"; /** * 默认密码 */ - public static final String DEFAULT_PASSWORD_EXCEPTION = "500002"; + public static final String DEFAULT_PASSWORD_EXCEPTION = "500200"; public static final String DEFAULT_PASSWORD_EXCEPTION_MESSAGE = "初始密码,请修改密码后登陆!"; - /** - * 参数异常 - */ - public static final String PARAMETER_EXCEPTION = "000003"; - /** * 0:代表存在 */ @@ -62,4 +77,14 @@ public class Constants { */ public static final Integer STATUS_1 = 1; + /** + * 0:代表显示 + */ + public static final String VISIBLE_0 = "0"; + + /** + * 1:代表隐藏 + */ + public static final String VISIBLE_1 = "1"; + } diff --git a/core/src/main/java/com/dite/znpt/service/LoginService.java b/core/src/main/java/com/dite/znpt/service/AuthService.java similarity index 85% rename from core/src/main/java/com/dite/znpt/service/LoginService.java rename to core/src/main/java/com/dite/znpt/service/AuthService.java index 33f4e05..dd54c0d 100644 --- a/core/src/main/java/com/dite/znpt/service/LoginService.java +++ b/core/src/main/java/com/dite/znpt/service/AuthService.java @@ -13,10 +13,12 @@ import java.util.List; * @date 2025/5/23/周五 14:31 * @description */ -public interface LoginService { +public interface AuthService { Result doLogin(LoginReq req); + void doLogout(); + List> getMenuInfo(String userId); UserInfo getUserInfo(String userId); diff --git a/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java new file mode 100644 index 0000000..4c76bd7 --- /dev/null +++ b/core/src/main/java/com/dite/znpt/service/impl/AuthServiceImpl.java @@ -0,0 +1,119 @@ +package com.dite.znpt.service.impl; + +import cn.dev33.satoken.stp.SaTokenInfo; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.tree.Tree; +import cn.hutool.core.util.StrUtil; +import cn.hutool.crypto.SecureUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.dite.znpt.constant.Constants; +import com.dite.znpt.converts.Converts; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.entity.DeptEntity; +import com.dite.znpt.domain.entity.MenuEntity; +import com.dite.znpt.domain.entity.RoleMenuEntity; +import com.dite.znpt.domain.entity.UserEntity; +import com.dite.znpt.domain.vo.LoginReq; +import com.dite.znpt.domain.vo.RoleResp; +import com.dite.znpt.domain.vo.UserInfo; +import com.dite.znpt.service.*; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/23/周五 14:31 + * @description + */ +@AllArgsConstructor +@Service +public class AuthServiceImpl implements AuthService { + + private final UserService userService; + + private final UserRoleService userRoleService; + + private final UserPostService userPostService; + + private final MenuService menuService; + + private final RoleMenuService roleMenuService; + + private final DeptService deptService; + + @Override + public Result doLogin(LoginReq req) { + String key = SecureUtil.md5(req.getAccount()).substring(8,24); + UserEntity user = userService.getOne(Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getAccount, req.getAccount()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0)); + if(null == user){ + return Result.error(Constants.ACCOUNT_ERROR_EXCEPTION, Constants.ACCOUNT_ERROR_EXCEPTION_MESSAGE); + } + try { + String password = SecureUtil.aes(key.getBytes()).decryptStr(req.getPassword()); + String pwdCiphertext = SecureUtil.md5(req.getAccount().concat(password).concat(user.getSalt())); + if(!pwdCiphertext.equals(user.getPassword())){ + return Result.error(Constants.PASSWORD_ERROR_EXCEPTION, Constants.PASSWORD_ERROR_EXCEPTION_MESSAGE); + } + }catch (Exception e){ + return Result.error(Constants.PASSWORD_EXCEPTION, Constants.PASSWORD_EXCEPTION_MESSAGE); + } + if(!user.getStatus().equals(Constants.STATUS_0)){ + return Result.error(Constants.USER_DISABLE_EXCEPTION, Constants.USER_DISABLE_EXCEPTION_MESSAGE); + } + if(user.getIsDefaultPassword()){ + return Result.error(Constants.DEFAULT_PASSWORD_EXCEPTION, Constants.DEFAULT_PASSWORD_EXCEPTION_MESSAGE); + } + StpUtil.login(user.getUserId()); + saveSession(user.getUserId()); + return Result.ok(StpUtil.getTokenInfo()); + } + + @Override + public void doLogout() { + StpUtil.logout(); + } + + @Override + public List> getMenuInfo(String userId) { + return (List>) StpUtil.getSession().get("menuInfo"); + } + + @Override + public UserInfo getUserInfo(String userId) { + return (UserInfo)StpUtil.getSession().get("userInfo"); + } + + private void saveSession(String userId){ + StpUtil.getSession().set("userInfo", queryUserInfo(userId)); + StpUtil.getSession().set("menuInfo", queryMenuInfo(userId)); + } + + private UserInfo queryUserInfo(String userId){ + UserInfo userInfo = new UserInfo(); + UserEntity user = userService.getOne(Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getUserId, userId).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0)); + userInfo.setUser(Converts.INSTANCE.toUserListResp(user)); + if(StrUtil.isNotBlank(user.getDeptId())){ + DeptEntity dept = deptService.getOne(Wrappers.lambdaQuery(DeptEntity.class).eq(DeptEntity::getDeptId, user.getDeptId()).eq(DeptEntity::getDelFlag, Constants.DEL_FLAG_0)); + userInfo.setDept(Converts.INSTANCE.toDeptResp(dept)); + } + userInfo.setRoles(userRoleService.getRolesByUserId(userId)); + userInfo.setPosts(userPostService.getPostsByUserId(userId)); + return userInfo; + } + + private List> queryMenuInfo(String userId){ + List roleIds = userRoleService.getRolesByUserId(userId).stream().map(RoleResp::getRoleId).toList(); + if(CollUtil.isEmpty(roleIds)){ + return new ArrayList<>(); + } + List menuIds = roleMenuService.list(Wrappers.lambdaQuery(RoleMenuEntity.class).in(CollUtil.isNotEmpty(roleIds), RoleMenuEntity::getRoleId, roleIds)).stream().map(RoleMenuEntity::getMenuId).toList(); + List menuList = menuService.list( + Wrappers.lambdaQuery(MenuEntity.class).in(CollUtil.isNotEmpty(menuIds), MenuEntity::getMenuId,menuIds) + ).stream().filter(menu -> Constants.VISIBLE_0.equals(menu.getVisible())).toList(); + return MenuServiceImpl.buildMenuTree(menuList); + } +} diff --git a/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java index 583e11e..9bb5d1c 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/DeptServiceImpl.java @@ -36,6 +36,10 @@ public class DeptServiceImpl extends ServiceImpl impleme @Override public List> tree(String deptName) { List deptList = StrUtil.isBlank(deptName) ? this.baseMapper.downwardRecursionSelect(null) : this.baseMapper.upwardRecursionSelect(deptName); + return buildDeptTree(deptList); + } + + public static List> buildDeptTree(List deptList) { //配置 TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); treeNodeConfig.setIdKey("deptId"); diff --git a/core/src/main/java/com/dite/znpt/service/impl/LoginServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/LoginServiceImpl.java deleted file mode 100644 index 287b3c4..0000000 --- a/core/src/main/java/com/dite/znpt/service/impl/LoginServiceImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package com.dite.znpt.service.impl; - -import cn.dev33.satoken.stp.SaTokenInfo; -import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.core.lang.tree.Tree; -import cn.hutool.core.util.StrUtil; -import cn.hutool.crypto.SecureUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.dite.znpt.constant.Constants; -import com.dite.znpt.converts.Converts; -import com.dite.znpt.domain.Result; -import com.dite.znpt.domain.entity.DeptEntity; -import com.dite.znpt.domain.entity.UserEntity; -import com.dite.znpt.domain.vo.LoginReq; -import com.dite.znpt.domain.vo.UserInfo; -import com.dite.znpt.service.*; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; -import java.util.List; - -/** - * @author Bear.G - * @date 2025/5/23/周五 14:31 - * @description - */ -@Service -public class LoginServiceImpl implements LoginService { - - @Resource - private UserService userService; - - @Resource - private UserRoleService userRoleService; - - @Resource - private UserPostService userPostService; - - @Resource - private DeptService deptService; - - @Override - public Result doLogin(LoginReq req) { - String key = SecureUtil.md5(req.getAccount()).substring(8,24); - String password = SecureUtil.aes(key.getBytes()).decryptStr(req.getPassword()); - UserEntity user = userService.getOne(Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getAccount, req.getAccount()).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0)); - String pwdCiphertext = SecureUtil.md5(req.getAccount().concat(password).concat(user.getSalt())); - if(!pwdCiphertext.equals(user.getPassword())){ - return Result.error(Constants.PASSWORD_ERROR_EXCEPTION, Constants.PASSWORD_ERROR_EXCEPTION_MESSAGE); - } - if(!user.getStatus().equals(Constants.STATUS_0)){ - return Result.error(Constants.USER_DISABLE_EXCEPTION, Constants.USER_DISABLE_EXCEPTION_MESSAGE); - } - if(user.getIsDefaultPassword()){ - return Result.error(Constants.DEFAULT_PASSWORD_EXCEPTION, Constants.DEFAULT_PASSWORD_EXCEPTION_MESSAGE); - } - StpUtil.login(user.getUserId()); - saveUserSession(user); - return Result.ok(StpUtil.getTokenInfo()); - } - - @Override - public List> getMenuInfo(String userId) { - return null; - } - - @Override - public UserInfo getUserInfo(String userId) { - UserInfo userInfo = new UserInfo(); - UserEntity user = userService.getOne(Wrappers.lambdaQuery(UserEntity.class).eq(UserEntity::getAccount, userId).eq(UserEntity::getDelFlag, Constants.DEL_FLAG_0)); - userInfo.setUser(Converts.INSTANCE.toUserListResp(user)); - DeptEntity dept = deptService.getOne(Wrappers.lambdaQuery(DeptEntity.class).eq(StrUtil.isNotBlank(user.getDeptId()), DeptEntity::getDeptId, user.getDeptId()).eq(DeptEntity::getDelFlag, Constants.DEL_FLAG_0)); - userInfo.setDept(Converts.INSTANCE.toDeptResp(dept)); - userInfo.setRoles(userRoleService.getRolesByUserId(userId)); - userInfo.setPosts(userPostService.getPostsByUserId(userId)); - return userInfo; - } - - private void saveUserSession(UserEntity user){ - StpUtil.getSession().set(user.getUserId(), user); - } -} diff --git a/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java index b6c93a3..3034c91 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/MenuServiceImpl.java @@ -7,7 +7,6 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.dite.znpt.constant.Message; import com.dite.znpt.converts.Converts; -import com.dite.znpt.domain.entity.DeptEntity; import com.dite.znpt.domain.entity.MenuEntity; import com.dite.znpt.domain.vo.MenuReq; import com.dite.znpt.domain.vo.MenuResp; @@ -30,6 +29,10 @@ public class MenuServiceImpl extends ServiceImpl impleme @Override public List> tree(String menuName) { List menuList = StrUtil.isBlank(menuName) ? this.baseMapper.downwardRecursionSelect(null) : this.baseMapper.upwardRecursionSelect(menuName); + return buildMenuTree(menuList); + } + + public static List> buildMenuTree(List menuList) { //配置 TreeNodeConfig treeNodeConfig = new TreeNodeConfig(); treeNodeConfig.setIdKey("menuId"); diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java index 313f11b..cb3a371 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/UserPostServiceImpl.java @@ -38,6 +38,9 @@ public class UserPostServiceImpl extends ServiceImpl getPostsByUserId(String userId) { List postIds = this.list(Wrappers.lambdaQuery(UserPostEntity.class).eq(UserPostEntity::getUserId, userId)).stream().map(UserPostEntity::getPostId).toList(); + if (CollUtil.isEmpty(postIds)) { + return new ArrayList<>(); + } List posts= postService.listByIds(postIds).stream().filter(post -> Constants.STATUS_0.equals(post.getStatus())).toList(); return Converts.INSTANCE.toPostResp(posts); } diff --git a/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java b/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java index f3fbd39..13688f5 100644 --- a/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java +++ b/core/src/main/java/com/dite/znpt/service/impl/UserRoleServiceImpl.java @@ -40,6 +40,9 @@ public class UserRoleServiceImpl extends ServiceImpl getRolesByUserId(String userId) { List roleIds = this.list(Wrappers.lambdaQuery(UserRoleEntity.class).eq(UserRoleEntity::getUserId, userId)).stream().map(UserRoleEntity::getRoleId).toList(); + if (CollUtil.isEmpty(roleIds)) { + return new ArrayList<>(); + } List roles = roleService.listByIds(roleIds).stream().filter(role -> Constants.DEL_FLAG_0.equals(role.getDelFlag()) && Constants.STATUS_0.equals(role.getStatus())).toList(); return Converts.INSTANCE.toRoleResp(roles); } diff --git a/web/src/main/java/com/dite/znpt/web/controller/AuthController.java b/web/src/main/java/com/dite/znpt/web/controller/AuthController.java new file mode 100644 index 0000000..745b7a2 --- /dev/null +++ b/web/src/main/java/com/dite/znpt/web/controller/AuthController.java @@ -0,0 +1,55 @@ +package com.dite.znpt.web.controller; + +import cn.dev33.satoken.stp.SaTokenInfo; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.lang.tree.Tree; +import com.dite.znpt.domain.Result; +import com.dite.znpt.domain.vo.LoginReq; +import com.dite.znpt.domain.vo.UserInfo; +import com.dite.znpt.service.AuthService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import java.util.List; + +/** + * @author Bear.G + * @date 2025/5/19/周一 14:32 + * @description + */ +@Api(tags = "认证相关") +@RestController +@RequestMapping("/auth") +public class AuthController { + + @Resource + private AuthService authService; + + @ApiOperation(value = "登录",httpMethod = "POST", notes = "密码加密采用aes(加密模式ECB,填充方式PKCS#7)加密传输,加密密钥产生逻辑:对账号做md5()计算,然后取值8-24位。demo数据:账号:admin,加密后的密码:Csq+AVwlEzX3r5vfxL7d/g== 账号:tino,加密后的密码:owbegSu4cMJRD4CiWO+WyQ==") + @PostMapping("/login") + public Result login(@Validated @RequestBody LoginReq req) { + return authService.doLogin(req); + } + + @GetMapping("/userInfo") + @ApiOperation(value = "获取用户信息",httpMethod = "GET") + public Result userInfo() { + return Result.ok(authService.getUserInfo(StpUtil.getLoginId().toString())); + } + + @GetMapping("/menu") + @ApiOperation(value = "获取菜单",httpMethod = "GET") + public Result>> getMenuInfo() { + return Result.ok(authService.getMenuInfo(StpUtil.getLoginId().toString())); + } + + @ApiOperation(value = "登出",httpMethod = "POST") + @PostMapping("/logout") + public Result logout() { + authService.doLogout(); + return Result.ok(); + } +} diff --git a/web/src/main/java/com/dite/znpt/web/controller/LoginController.java b/web/src/main/java/com/dite/znpt/web/controller/LoginController.java deleted file mode 100644 index 6bb8ea8..0000000 --- a/web/src/main/java/com/dite/znpt/web/controller/LoginController.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.dite.znpt.web.controller; - -import cn.dev33.satoken.stp.SaTokenInfo; -import cn.dev33.satoken.stp.StpUtil; -import cn.hutool.crypto.SecureUtil; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; -import com.dite.znpt.constant.Constants; -import com.dite.znpt.domain.Result; -import com.dite.znpt.domain.entity.UserEntity; -import com.dite.znpt.domain.vo.LoginReq; -import com.dite.znpt.service.LoginService; -import com.dite.znpt.service.UserService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import javax.annotation.Resource; - -/** - * @author Bear.G - * @date 2025/5/19/周一 14:32 - * @description - */ -@Api(tags = "登录") -@RestController -public class LoginController { - - @Resource - private LoginService loginService; - - @ApiOperation(value = "登陆",httpMethod = "POST") - @PostMapping("/login") - public Result login(@Validated @RequestBody LoginReq req) { - return loginService.doLogin(req); - } -}