feat(property): 新增入驻员工登录功能

This commit is contained in:
2025-09-05 17:55:47 +08:00
parent 7cef50cc19
commit 87f5ee97fa
43 changed files with 618 additions and 117 deletions

View File

@@ -99,6 +99,11 @@
<artifactId>ruoyi-common-loadbalancer</artifactId>
</dependency>
<dependency>
<groupId>org.dromara</groupId>
<artifactId>property-api</artifactId>
</dependency>
<!-- ELK 日志收集 -->
<!-- <dependency>-->
<!-- <groupId>org.dromara</groupId>-->

View File

@@ -0,0 +1,31 @@
package org.dromara.auth.form;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.dromara.common.core.domain.model.LoginBody;
import org.hibernate.validator.constraints.Length;
/**
* @author lsm
* @apiNote ResidentLoginBody
* @since 2025/9/5
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class ResidentLoginBody extends LoginBody {
/**
* 用户名
*/
@NotBlank(message = "{user.username.not.blank}")
@Length(min = 2, max = 30, message = "{user.username.length.valid}")
private String username;
/**
* 用户密码
*/
@NotBlank(message = "{user.password.not.blank}")
@Length(min = 5, max = 30, message = "{user.password.length.valid}")
private String password;
}

View File

@@ -0,0 +1,68 @@
package org.dromara.auth.service.impl;
import cn.dev33.satoken.stp.StpUtil;
import cn.dev33.satoken.stp.parameter.SaLoginParameter;
import cn.hutool.crypto.digest.BCrypt;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference;
import org.dromara.auth.domain.vo.LoginVo;
import org.dromara.auth.form.PasswordLoginBody;
import org.dromara.auth.service.IAuthStrategy;
import org.dromara.auth.service.SysLoginService;
import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.property.api.RemoteResidentPersonService;
import org.dromara.property.api.model.LoginResidentPerson;
import org.dromara.system.api.domain.vo.RemoteClientVo;
import org.springframework.stereotype.Service;
/**
* @author lsm
* @apiNote ResidentAuthStrategy
* @since 2025/9/5
*/
@Slf4j
@Service("resident" + IAuthStrategy.BASE_NAME)
@RequiredArgsConstructor
public class ResidentAuthStrategy implements IAuthStrategy {
private final SysLoginService loginService;
@DubboReference
private RemoteResidentPersonService remoteResidentPersonService;
@Override
public LoginVo login(String body, RemoteClientVo client) {
PasswordLoginBody loginBody = JsonUtils.parseObject(body, PasswordLoginBody.class);
ValidatorUtils.validate(loginBody);
assert loginBody != null;
String tenantId = loginBody.getTenantId();
String username = loginBody.getUsername();
String password = loginBody.getPassword();
LoginResidentPerson loginUser = TenantHelper.dynamic(tenantId, () -> {
LoginResidentPerson user = remoteResidentPersonService.getResidentPersonInfo(username, tenantId);
loginService.checkLogin(LoginType.PASSWORD, tenantId, username, () -> !BCrypt.checkpw(password, user.getPassword()));
return user;
});
loginUser.setClientKey(client.getClientKey());
SaLoginParameter model = new SaLoginParameter();
model.setDeviceType(client.getDeviceType());
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期
model.setTimeout(client.getTimeout());
model.setActiveTimeout(client.getActiveTimeout());
model.setExtra(LoginHelper.CLIENT_KEY, client.getClientId());
LoginHelper.residentLogin(loginUser, model);
LoginVo loginVo = new LoginVo();
loginVo.setAccessToken(StpUtil.getTokenValue());
loginVo.setExpireIn(StpUtil.getTokenTimeout());
loginVo.setClientId(client.getClientId());
return loginVo;
}
}