Jelajahi Sumber

实现 登录, 替换依赖

Gaokun Wang 1 bulan lalu
induk
melakukan
b6f24e5bd6

+ 9 - 2
eco-bom/pom.xml

@@ -82,6 +82,13 @@
                 <version>${revision}</version>
             </dependency>
 
+            <!-- com-security -->
+            <dependency>
+                <groupId>org.eco.vip</groupId>
+                <artifactId>com-security</artifactId>
+                <version>${revision}</version>
+            </dependency>
+
             <!-- lombok -->
             <dependency>
                 <groupId>org.projectlombok</groupId>
@@ -138,10 +145,10 @@
                 <version>${DmJdbcDriver18.version}</version>
             </dependency>
 
-            <!-- https://mvnrepository.com/artifact/cn.dev33/sa-token-spring-boot-starter -->
+            <!-- https://mvnrepository.com/artifact/cn.dev33/sa-token-spring-boot3-starter -->
             <dependency>
                 <groupId>cn.dev33</groupId>
-                <artifactId>sa-token-spring-boot-starter</artifactId>
+                <artifactId>sa-token-spring-boot3-starter</artifactId>
                 <version>${sa-token.version}</version>
             </dependency>
 

+ 28 - 0
eco-common/com-core/src/main/java/org/eco/vip/orm/enums/UserStatus.java

@@ -0,0 +1,28 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.orm.enums;
+
+
+import lombok.Getter;
+
+/**
+ * @description UserStatus
+ *
+ * @author GaoKunW
+ * @date 2025/7/2 17:04
+ */
+@Getter
+public enum UserStatus {
+    NORMAL("1", "正常"), DISABLE("0", "停用"), DELETED("2", "删除");
+
+    private final String code;
+    private final String info;
+
+    UserStatus(String code, String info) {
+        this.code = code;
+        this.info = info;
+    }
+}

+ 1 - 1
eco-common/com-security/pom.xml

@@ -16,7 +16,7 @@
         </dependency>
         <dependency>
             <groupId>cn.dev33</groupId>
-            <artifactId>sa-token-spring-boot-starter</artifactId>
+            <artifactId>sa-token-spring-boot3-starter</artifactId>
         </dependency>
     </dependencies>
 </project>

+ 3 - 1
eco-common/com-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports

@@ -1 +1,3 @@
-
+org.eco.vip.security.config.SaTokenConfig
+org.eco.vip.security.config.SecurityConfig
+org.eco.vip.security.handler.AllUrlHandler

+ 4 - 0
eco-nexus-core/auth-biz/pom.xml

@@ -28,5 +28,9 @@
             <groupId>org.eco.vip</groupId>
             <artifactId>com-orm</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.eco.vip</groupId>
+            <artifactId>com-security</artifactId>
+        </dependency>
     </dependencies>
 </project>

+ 0 - 1
eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/controller/auth/AuthController.java

@@ -37,7 +37,6 @@ public class AuthController {
     private IAuthService adminAuthService;
 
     @PostMapping("/login")
-    @PermitAll
     public CommonResult<AuthVO> login(@RequestBody String body) {
         AuthQuery authQueryBody = JsonUtils.parseObject(body, AuthQuery.class);
         // 校验参数

+ 24 - 3
eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/domain/auth/vo/AuthQuery.java

@@ -45,8 +45,29 @@ public class AuthQuery {
     private String captcha;
 
     /**
-     * 开启验证码的 Group
+     * 客户端id
      */
-    public interface CodeEnableGroup {
-    }
+    @NotBlank(message = "客户端id不能为空")
+    private String clientId;
+
+    /**
+     * 授权类型
+     */
+    @NotBlank(message = "授权类型不能为空")
+    private String grantType;
+
+    /**
+     * 租户ID
+     */
+    private String tenantId;
+
+    /**
+     * 验证码
+     */
+    private String code;
+
+    /**
+     * 唯一标识
+     */
+    private String uuid;
 }

+ 1 - 0
eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/domain/auth/vo/AuthVO.java

@@ -6,6 +6,7 @@
 package org.eco.vip.auth.domain.auth.vo;
 
 
+import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Data;

+ 2 - 2
eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/domain/user/vo/UserVO.java

@@ -31,9 +31,9 @@ public class UserVO extends BaseEntity {
     private String userId;
 
     /**
-     * 部门ID
+     * 组织ID
      */
-    private String deptId;
+    private String orgId;
 
     /**
      * 用户账号

+ 42 - 0
eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/auth/LoginService.java

@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2025 GaoKunW
+ *
+ */
+
+package org.eco.vip.auth.service.auth;
+
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.eco.vip.auth.domain.user.vo.UserVO;
+import org.eco.vip.orm.pojo.LoginUser;
+import org.springframework.stereotype.Service;
+
+/**
+ * @description LoginService
+ *
+ * @author GaoKunW
+ * @date 2025/7/2 17:11
+ */
+
+@RequiredArgsConstructor
+@Slf4j
+@Service
+public class LoginService {
+
+    public LoginUser buildLoginUser(UserVO user) {
+        LoginUser loginUser = new LoginUser();
+        loginUser.setTenantId(user.getTenantId());
+        loginUser.setUserId(user.getUserId());
+        loginUser.setOrgId(user.getOrgId());
+        loginUser.setUsername(user.getUserName());
+        loginUser.setNickname(user.getNickName());
+        loginUser.setUserType(user.getUserType());
+//        loginUser.setMenuPermission(permissionService.getMenuPermission(user.getUserId()));
+//        loginUser.setRolePermission(permissionService.getRolePermission(user.getUserId()));
+//        loginUser.setOrgName(ObjectUtil.isNull(user.getDept()) ? "" : user.getDept().getDeptName());
+//        List<RoleDTO> roles = BeanUtil.copyToList(user.getRoles(), RoleDTO.class);
+//        loginUser.setRoles(roles);
+        return loginUser;
+    }
+}

+ 38 - 5
eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/auth/PasswordAuthStrategy.java

@@ -6,13 +6,21 @@
 package org.eco.vip.auth.service.auth;
 
 
+import cn.dev33.satoken.stp.StpUtil;
+import cn.dev33.satoken.stp.parameter.SaLoginParameter;
 import jakarta.annotation.Resource;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.eco.vip.auth.domain.auth.vo.AuthQuery;
 import org.eco.vip.auth.domain.auth.vo.AuthVO;
-import org.eco.vip.auth.domain.user.User;
+import org.eco.vip.auth.domain.user.vo.UserVO;
 import org.eco.vip.auth.service.user.IUserService;
+import org.eco.vip.orm.enums.UserStatus;
+import org.eco.vip.orm.exception.BusinessException;
+import org.eco.vip.orm.pojo.LoginUser;
+import org.eco.vip.orm.utils.ObjUtils;
+import org.eco.vip.orm.utils.StrUtils;
+import org.eco.vip.security.utils.LoginHelper;
 import org.springframework.stereotype.Service;
 
 /**
@@ -30,11 +38,36 @@ public class PasswordAuthStrategy implements IAuthStrategy {
     IUserService userService;
     @Override
     public AuthVO login(AuthQuery authQuery) {
-        return null;
+        String tenantId = authQuery.getTenantId();
+        String account = authQuery.getAccount();
+        String password = authQuery.getPassword();
+        String code = authQuery.getCode();
+        String uuid = authQuery.getUuid();
+
+        UserVO userVO = getUserByAccount(tenantId, account);
+
+        LoginUser loginUser = new LoginUser();
+        SaLoginParameter loginParameter = new SaLoginParameter();
+        loginParameter.setDeviceType("pc");
+        loginParameter.setTimeout(10);
+        loginParameter.setActiveTimeout(30);
+        loginParameter.setExtra(LoginHelper.CLIENT_KEY, "");
+        LoginHelper.login(loginUser, loginParameter);
+        AuthVO authVO = new AuthVO();
+        authVO.setAccessToken(StpUtil.getTokenValue());
+        authVO.setExpiresTime(StpUtil.getTokenTimeout());
+        return authVO;
     }
 
-    private User getUserByUsername(String tenantId, String username) {
-        userService.selectTenantUserByUserName(tenantId, username);
-        return null;
+    private UserVO getUserByAccount(String tenantId, String account) {
+        UserVO userVO = userService.selectTenantUserByUserName(tenantId, account);
+        if (ObjUtils.isNull(userVO)) {
+            log.info("登录账号:{} 不存在.", account);
+            throw new BusinessException("登录账号:{} 不存在.", account);
+        } else if (StrUtils.equals(UserStatus.DISABLE.getCode(), userVO.getStatus())) {
+            log.info("登录账号:{} 已被停用.", account);
+            throw new BusinessException("登录账号:{} 已被停用.", account);
+        }
+        return userVO;
     }
 }

+ 6 - 4
eco-nexus-core/auth-biz/src/main/java/org/eco/vip/auth/service/user/UserService.java

@@ -38,7 +38,7 @@ public class UserService extends BaseService<UserMapper, User> implements IUserS
     }
 
     private QueryWrapper buildOneQueryWrapper() {
-        return QueryWrapper.create().select(USER.USER_ID, USER.USER_NAME);
+        return QueryWrapper.create().select(USER.ALL_COLUMNS);
     }
 
     @Override
@@ -59,8 +59,10 @@ public class UserService extends BaseService<UserMapper, User> implements IUserS
     }
 
     @Override
-    public UserVO selectTenantUserByUserName(String tenantId, String username) {
-//        QueryWrapper queryWrapper = query().where(SYSTEM_USER)
-        return null;
+    public UserVO selectTenantUserByUserName(String tenantId, String account) {
+        QueryWrapper queryWrapper = buildOneQueryWrapper()
+                .where(USER.ACCOUNT.eq(account))
+                .and(USER.TENANT_ID.eq(tenantId));
+        return userMapper.selectOneWithRelationsByQueryAs(queryWrapper, UserVO.class);
     }
 }

+ 20 - 0
eco-start/src/main/resources/application.yml

@@ -61,8 +61,28 @@ sa-token:
   token-style: uuid
   # 是否输出操作日志
   is-log: false
+  # 是否打印log
+  is-print: false
   # jwt秘钥
   jwt-secret-key: uWqxTNKHjmIfDohOgZCGwElMdJ
+# security配置
+security:
+  # 排除路径
+  excludes:
+    # 静态资源
+    - /*.html
+    - /**/*.html
+    - /**/*.css
+    - /**/*.js
+    - /profile/**
+    # 公共路径
+    - /favicon.ico
+    - /error
+    # actuator 监控配置
+    - /actuator
+    - /actuator/**
+    # 其它链接
+    - /login
 
 # MyBatisFlex公共配置
 mybatis-flex: