update 更新 sys_client 表字段以及 sql, 增加设备类型 device_type, activity_timeout 改为 active_timeout ;

refactor 重构 IAuthStrategy#login 增加方法参数 client ;
refactor 重构 LoginHelper#loginByDevice 增加方法参数 deviceType, activeTimeout, timeout, 修改相应方法调用 ;
delete 删除 SysLoginService 合并多余的策略校验方法 ;
This commit is contained in:
zlyx 2023-06-26 09:38:08 +08:00
parent 4185aafbb9
commit ad287e3d91
15 changed files with 80 additions and 146 deletions

View File

@ -83,7 +83,7 @@ public class AuthController {
// 校验租户 // 校验租户
loginService.checkTenant(loginBody.getTenantId()); loginService.checkTenant(loginBody.getTenantId());
// 登录 // 登录
return R.ok(IAuthStrategy.login(loginBody)); return R.ok(IAuthStrategy.login(loginBody, client));
} }
/** /**

View File

@ -4,6 +4,7 @@ package org.dromara.web.service;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.SpringUtils; import org.dromara.common.core.utils.SpringUtils;
import org.dromara.system.domain.SysClient;
import org.dromara.web.domain.vo.LoginVo; import org.dromara.web.domain.vo.LoginVo;
/** /**
@ -18,7 +19,7 @@ public interface IAuthStrategy {
/** /**
* 登录 * 登录
*/ */
static LoginVo login(LoginBody loginBody) { static LoginVo login(LoginBody loginBody, SysClient client) {
// 授权类型和客户端id // 授权类型和客户端id
String clientId = loginBody.getClientId(); String clientId = loginBody.getClientId();
String grantType = loginBody.getGrantType(); String grantType = loginBody.getGrantType();
@ -28,7 +29,7 @@ public interface IAuthStrategy {
} }
IAuthStrategy instance = SpringUtils.getBean(beanName); IAuthStrategy instance = SpringUtils.getBean(beanName);
instance.validate(loginBody); instance.validate(loginBody);
return instance.login(clientId, loginBody); return instance.login(clientId, loginBody, client);
} }
/** /**
@ -37,8 +38,8 @@ public interface IAuthStrategy {
void validate(LoginBody loginBody); void validate(LoginBody loginBody);
/** /**
* 参数校验 * 登录
*/ */
LoginVo login(String clientId, LoginBody loginBody); LoginVo login(String clientId, LoginBody loginBody, SysClient client);
} }

View File

@ -19,8 +19,6 @@ import org.dromara.common.core.enums.DeviceType;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.TenantStatus; import org.dromara.common.core.enums.TenantStatus;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.user.CaptchaException;
import org.dromara.common.core.exception.user.CaptchaExpireException;
import org.dromara.common.core.exception.user.UserException; import org.dromara.common.core.exception.user.UserException;
import org.dromara.common.core.utils.*; import org.dromara.common.core.utils.*;
import org.dromara.common.log.event.LogininforEvent; import org.dromara.common.log.event.LogininforEvent;
@ -33,7 +31,6 @@ import org.dromara.system.domain.bo.SysSocialBo;
import org.dromara.system.domain.vo.SysSocialVo; import org.dromara.system.domain.vo.SysSocialVo;
import org.dromara.system.domain.vo.SysTenantVo; import org.dromara.system.domain.vo.SysTenantVo;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.SysClientMapper;
import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.mapper.SysUserMapper;
import org.dromara.system.service.ISysPermissionService; import org.dromara.system.service.ISysPermissionService;
import org.dromara.system.service.ISysSocialService; import org.dromara.system.service.ISysSocialService;
@ -63,11 +60,16 @@ public class SysLoginService {
@Value("${user.password.lockTime}") @Value("${user.password.lockTime}")
private Integer lockTime; private Integer lockTime;
@Value("sa-token.active-timeout")
private Long activeTimeout;
@Value("sa-token.timeout")
private Long timeout;
private final ISysTenantService tenantService; private final ISysTenantService tenantService;
private final ISysPermissionService permissionService; private final ISysPermissionService permissionService;
private final ISysSocialService sysSocialService; private final ISysSocialService sysSocialService;
private final SysUserMapper userMapper; private final SysUserMapper userMapper;
private final SysClientMapper clientMapper;
/** /**
* 社交登录 * 社交登录
@ -121,7 +123,7 @@ public class SysLoginService {
private R<String> loginAndRecord(String tenantId, String userName, AuthUser authUser) { private R<String> loginAndRecord(String tenantId, String userName, AuthUser authUser) {
checkTenant(tenantId); checkTenant(tenantId);
SysUserVo user = loadUserByUsername(tenantId, userName); SysUserVo user = loadUserByUsername(tenantId, userName);
LoginHelper.loginByDevice(buildLoginUser(user), DeviceType.SOCIAL); LoginHelper.loginByDevice(buildLoginUser(user), DeviceType.PC.getDevice(), activeTimeout, timeout);
recordLogininfor(user.getTenantId(), userName, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); recordLogininfor(user.getTenantId(), userName, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
recordLoginInfo(user.getUserId()); recordLoginInfo(user.getUserId());
return R.ok(StpUtil.getTokenValue()); return R.ok(StpUtil.getTokenValue());
@ -161,50 +163,6 @@ public class SysLoginService {
SpringUtils.context().publishEvent(logininforEvent); SpringUtils.context().publishEvent(logininforEvent);
} }
/**
* 校验短信验证码
*/
private boolean validateSmsCode(String tenantId, String phonenumber, String smsCode) {
String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + phonenumber);
if (StringUtils.isBlank(code)) {
recordLogininfor(tenantId, phonenumber, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
throw new CaptchaExpireException();
}
return code.equals(smsCode);
}
/**
* 校验邮箱验证码
*/
private boolean validateEmailCode(String tenantId, String email, String emailCode) {
String code = RedisUtils.getCacheObject(GlobalConstants.CAPTCHA_CODE_KEY + email);
if (StringUtils.isBlank(code)) {
recordLogininfor(tenantId, email, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
throw new CaptchaExpireException();
}
return code.equals(emailCode);
}
/**
* 校验验证码
*
* @param username 用户名
* @param code 验证码
* @param uuid 唯一标识
*/
public void validateCaptcha(String tenantId, String username, String code, String uuid) {
String verifyKey = GlobalConstants.CAPTCHA_CODE_KEY + StringUtils.defaultString(uuid, "");
String captcha = RedisUtils.getCacheObject(verifyKey);
RedisUtils.deleteObject(verifyKey);
if (captcha == null) {
recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"));
throw new CaptchaExpireException();
}
if (!code.equalsIgnoreCase(captcha)) {
recordLogininfor(tenantId, username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"));
throw new CaptchaException();
}
}
private SysUserVo loadUserByUsername(String tenantId, String username) { private SysUserVo loadUserByUsername(String tenantId, String username) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>() SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
@ -224,56 +182,6 @@ public class SysLoginService {
return userMapper.selectUserByUserName(username); return userMapper.selectUserByUserName(username);
} }
private SysUserVo loadUserByPhonenumber(String tenantId, String phonenumber) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getPhonenumber, SysUser::getStatus)
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
.eq(SysUser::getPhonenumber, phonenumber));
if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", phonenumber);
throw new UserException("user.not.exists", phonenumber);
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", phonenumber);
throw new UserException("user.blocked", phonenumber);
}
if (TenantHelper.isEnable()) {
return userMapper.selectTenantUserByPhonenumber(phonenumber, tenantId);
}
return userMapper.selectUserByPhonenumber(phonenumber);
}
private SysUserVo loadUserByEmail(String tenantId, String email) {
SysUser user = userMapper.selectOne(new LambdaQueryWrapper<SysUser>()
.select(SysUser::getEmail, SysUser::getStatus)
.eq(TenantHelper.isEnable(), SysUser::getTenantId, tenantId)
.eq(SysUser::getEmail, email));
if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", email);
throw new UserException("user.not.exists", email);
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", email);
throw new UserException("user.blocked", email);
}
if (TenantHelper.isEnable()) {
return userMapper.selectTenantUserByEmail(email, tenantId);
}
return userMapper.selectUserByEmail(email);
}
private SysUserVo loadUserByOpenid(String openid) {
// 使用 openid 查询绑定用户 如未绑定用户 则根据业务自行处理 例如 创建默认用户
// todo 自行实现 userService.selectUserByOpenid(openid);
SysUserVo user = new SysUserVo();
if (ObjectUtil.isNull(user)) {
log.info("登录用户:{} 不存在.", openid);
// todo 用户不存在 业务逻辑自行实现
} else if (UserStatus.DISABLE.getCode().equals(user.getStatus())) {
log.info("登录用户:{} 已被停用.", openid);
// todo 用户已被停用 业务逻辑自行实现
}
return user;
}
/** /**
* 构建登录用户 * 构建登录用户
*/ */

View File

@ -9,7 +9,6 @@ import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.DeviceType;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.user.CaptchaExpireException; import org.dromara.common.core.exception.user.CaptchaExpireException;
@ -21,6 +20,7 @@ import org.dromara.common.core.validate.auth.EmailGroup;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.mapper.SysUserMapper;
@ -48,7 +48,7 @@ public class EmailAuthStrategy implements IAuthStrategy {
} }
@Override @Override
public LoginVo login(String clientId, LoginBody loginBody) { public LoginVo login(String clientId, LoginBody loginBody, SysClient client) {
String tenantId = loginBody.getTenantId(); String tenantId = loginBody.getTenantId();
String email = loginBody.getEmail(); String email = loginBody.getEmail();
String emailCode = loginBody.getEmailCode(); String emailCode = loginBody.getEmailCode();
@ -60,7 +60,7 @@ public class EmailAuthStrategy implements IAuthStrategy {
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
LoginUser loginUser = loginService.buildLoginUser(user); LoginUser loginUser = loginService.buildLoginUser(user);
// 生成token // 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.APP); LoginHelper.loginByDevice(loginUser, client.getDeviceType(), client.getActiveTimeout(), client.getTimeout());
loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
loginService.recordLoginInfo(user.getUserId()); loginService.recordLoginInfo(user.getUserId());

View File

@ -10,7 +10,6 @@ import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.DeviceType;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.user.CaptchaException; import org.dromara.common.core.exception.user.CaptchaException;
@ -24,6 +23,7 @@ import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.common.web.config.properties.CaptchaProperties; import org.dromara.common.web.config.properties.CaptchaProperties;
import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.mapper.SysUserMapper;
@ -52,7 +52,7 @@ public class PasswordAuthStrategy implements IAuthStrategy {
} }
@Override @Override
public LoginVo login(String clientId, LoginBody loginBody) { public LoginVo login(String clientId, LoginBody loginBody, SysClient client) {
String tenantId = loginBody.getTenantId(); String tenantId = loginBody.getTenantId();
String username = loginBody.getUsername(); String username = loginBody.getUsername();
String password = loginBody.getPassword(); String password = loginBody.getPassword();
@ -70,7 +70,7 @@ public class PasswordAuthStrategy implements IAuthStrategy {
// 此处可根据登录用户的数据不同 自行创建 loginUser // 此处可根据登录用户的数据不同 自行创建 loginUser
LoginUser loginUser = loginService.buildLoginUser(user); LoginUser loginUser = loginService.buildLoginUser(user);
// 生成token // 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.PC); LoginHelper.loginByDevice(loginUser, client.getDeviceType(), client.getActiveTimeout(), client.getTimeout());
loginService.recordLogininfor(loginUser.getTenantId(), username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); loginService.recordLogininfor(loginUser.getTenantId(), username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
loginService.recordLoginInfo(user.getUserId()); loginService.recordLoginInfo(user.getUserId());

View File

@ -9,7 +9,6 @@ import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.constant.GlobalConstants; import org.dromara.common.core.constant.GlobalConstants;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.DeviceType;
import org.dromara.common.core.enums.LoginType; import org.dromara.common.core.enums.LoginType;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.exception.user.CaptchaExpireException; import org.dromara.common.core.exception.user.CaptchaExpireException;
@ -21,6 +20,7 @@ import org.dromara.common.core.validate.auth.SmsGroup;
import org.dromara.common.redis.utils.RedisUtils; import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.SysUser; import org.dromara.system.domain.SysUser;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.system.mapper.SysUserMapper; import org.dromara.system.mapper.SysUserMapper;
@ -48,7 +48,7 @@ public class SmsAuthStrategy implements IAuthStrategy {
} }
@Override @Override
public LoginVo login(String clientId, LoginBody loginBody) { public LoginVo login(String clientId, LoginBody loginBody, SysClient client) {
String tenantId = loginBody.getTenantId(); String tenantId = loginBody.getTenantId();
String phonenumber = loginBody.getPhonenumber(); String phonenumber = loginBody.getPhonenumber();
String smsCode = loginBody.getSmsCode(); String smsCode = loginBody.getSmsCode();
@ -60,7 +60,7 @@ public class SmsAuthStrategy implements IAuthStrategy {
// 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了 // 此处可根据登录用户的数据不同 自行创建 loginUser 属性不够用继承扩展就行了
LoginUser loginUser = loginService.buildLoginUser(user); LoginUser loginUser = loginService.buildLoginUser(user);
// 生成token // 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.APP); LoginHelper.loginByDevice(loginUser, client.getDeviceType(), client.getActiveTimeout(), client.getTimeout());
loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
loginService.recordLoginInfo(user.getUserId()); loginService.recordLoginInfo(user.getUserId());

View File

@ -7,12 +7,12 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.constant.Constants; import org.dromara.common.core.constant.Constants;
import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.domain.model.LoginBody;
import org.dromara.common.core.domain.model.XcxLoginUser; import org.dromara.common.core.domain.model.XcxLoginUser;
import org.dromara.common.core.enums.DeviceType;
import org.dromara.common.core.enums.UserStatus; import org.dromara.common.core.enums.UserStatus;
import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.MessageUtils;
import org.dromara.common.core.utils.ValidatorUtils; import org.dromara.common.core.utils.ValidatorUtils;
import org.dromara.common.core.validate.auth.WechatGroup; import org.dromara.common.core.validate.auth.WechatGroup;
import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.system.domain.SysClient;
import org.dromara.system.domain.vo.SysUserVo; import org.dromara.system.domain.vo.SysUserVo;
import org.dromara.web.domain.vo.LoginVo; import org.dromara.web.domain.vo.LoginVo;
import org.dromara.web.service.IAuthStrategy; import org.dromara.web.service.IAuthStrategy;
@ -37,7 +37,7 @@ public class XcxAuthStrategy implements IAuthStrategy {
} }
@Override @Override
public LoginVo login(String clientId, LoginBody loginBody) { public LoginVo login(String clientId, LoginBody loginBody, SysClient client) {
// xcxCode 小程序调用 wx.login 授权后获取 // xcxCode 小程序调用 wx.login 授权后获取
String xcxCode = loginBody.getXcxCode(); String xcxCode = loginBody.getXcxCode();
// todo 以下自行实现 // todo 以下自行实现
@ -54,7 +54,7 @@ public class XcxAuthStrategy implements IAuthStrategy {
loginUser.setUserType(user.getUserType()); loginUser.setUserType(user.getUserType());
loginUser.setOpenid(openid); loginUser.setOpenid(openid);
// 生成token // 生成token
LoginHelper.loginByDevice(loginUser, DeviceType.XCX); LoginHelper.loginByDevice(loginUser, client.getDeviceType(), client.getActiveTimeout(), client.getTimeout());
loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")); loginService.recordLogininfor(loginUser.getTenantId(), user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"));
loginService.recordLoginInfo(user.getUserId()); loginService.recordLoginInfo(user.getUserId());

View File

@ -10,10 +10,10 @@ import cn.hutool.core.util.ObjectUtil;
import org.dromara.common.core.constant.TenantConstants; import org.dromara.common.core.constant.TenantConstants;
import org.dromara.common.core.constant.UserConstants; import org.dromara.common.core.constant.UserConstants;
import org.dromara.common.core.domain.model.LoginUser; import org.dromara.common.core.domain.model.LoginUser;
import org.dromara.common.core.enums.DeviceType;
import org.dromara.common.core.enums.UserType; import org.dromara.common.core.enums.UserType;
import lombok.AccessLevel; import lombok.AccessLevel;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.dromara.common.core.utils.StringUtils;
import java.util.Set; import java.util.Set;
@ -42,32 +42,30 @@ public class LoginHelper {
* @param loginUser 登录用户信息 * @param loginUser 登录用户信息
*/ */
public static void login(LoginUser loginUser) { public static void login(LoginUser loginUser) {
loginByDevice(loginUser, null); loginByDevice(loginUser, null, 1800L, 604800L);
} }
/** /**
* 登录系统 基于 设备类型 * 登录系统 基于 设备类型
* 针对相同用户体系不同设备 * 针对相同用户体系不同设备
* *
* @param loginUser 登录用户信息 * @param loginUser 登录用户信息
* @param deviceType 设备类型
* @param activeTimeout token活跃超时时间
* @param timeout token固定超时时间
*/ */
public static void loginByDevice(LoginUser loginUser, DeviceType deviceType) { public static void loginByDevice(LoginUser loginUser, String deviceType, Long activeTimeout, Long timeout) {
SaStorage storage = SaHolder.getStorage(); SaStorage storage = SaHolder.getStorage();
storage.set(LOGIN_USER_KEY, loginUser); storage.set(LOGIN_USER_KEY, loginUser);
storage.set(TENANT_KEY, loginUser.getTenantId()); storage.set(TENANT_KEY, loginUser.getTenantId());
storage.set(USER_KEY, loginUser.getUserId()); storage.set(USER_KEY, loginUser.getUserId());
SaLoginModel model = new SaLoginModel(); SaLoginModel model = new SaLoginModel();
if (ObjectUtil.isNotNull(deviceType)) { if (StringUtils.isNotEmpty(deviceType)) {
model.setDevice(deviceType.getDevice()); model.setDevice(deviceType);
} }
// 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置 // 自定义分配 不同用户体系 不同 token 授权时间 不设置默认走全局 yml 配置
// 例如: 后台用户30分钟过期 app用户1天过期 // 例如: 后台用户30分钟过期 app用户1天过期
// UserType userType = UserType.getUserType(loginUser.getUserType()); model.setTimeout(timeout).setActiveTimeout(activeTimeout);
// if (userType == UserType.SYS_USER) {
// model.setTimeout(86400).setActiveTimeout(1800);
// } else if (userType == UserType.APP_USER) {
// model.setTimeout(86400).setActiveTimeout(1800);
// }
StpUtil.stpLogic.setLoginType(loginUser.getUserType()) StpUtil.stpLogic.setLoginType(loginUser.getUserType())
.login(loginUser.getLoginId(), .login(loginUser.getLoginId(),
model.setExtra(TENANT_KEY, loginUser.getTenantId()) model.setExtra(TENANT_KEY, loginUser.getTenantId())

View File

@ -47,10 +47,15 @@ public class SysClient extends BaseEntity {
*/ */
private String grantType; private String grantType;
/**
* 设备类型
*/
private String deviceType;
/** /**
* token活跃超时时间 * token活跃超时时间
*/ */
private Long activityTimeout; private Long activeTimeout;
/** /**
* token固定超时时间 * token固定超时时间

View File

@ -56,10 +56,15 @@ public class SysClientBo extends BaseEntity {
*/ */
private String grantType; private String grantType;
/**
* 设备类型
*/
private String deviceType;
/** /**
* token活跃超时时间 * token活跃超时时间
*/ */
private Long activityTimeout; private Long activeTimeout;
/** /**
* token固定超时时间 * token固定超时时间

View File

@ -62,11 +62,16 @@ public class SysClientVo implements Serializable {
*/ */
private String grantType; private String grantType;
/**
* 设备类型
*/
private String deviceType;
/** /**
* token活跃超时时间 * token活跃超时时间
*/ */
@ExcelProperty(value = "token活跃超时时间") @ExcelProperty(value = "token活跃超时时间")
private Long activityTimeout; private Long activeTimeout;
/** /**
* token固定超时时间 * token固定超时时间

View File

@ -1204,7 +1204,8 @@ create table sys_client (
client_key varchar(32) default null, client_key varchar(32) default null,
client_secret varchar(255) default null, client_secret varchar(255) default null,
grant_type varchar(255) default null, grant_type varchar(255) default null,
activity_timeout number(11) default 1800, device_type varchar(32) default null,
active_timeout number(11) default 1800,
timeout number(11) default 604800, timeout number(11) default 604800,
status char(1) default '0', status char(1) default '0',
del_flag char(1) default '0', del_flag char(1) default '0',
@ -1223,7 +1224,8 @@ comment on column sys_client.client_id is '客户端id';
comment on column sys_client.client_key is '客户端key'; comment on column sys_client.client_key is '客户端key';
comment on column sys_client.client_secret is '客户端秘钥'; comment on column sys_client.client_secret is '客户端秘钥';
comment on column sys_client.grant_type is '授权类型'; comment on column sys_client.grant_type is '授权类型';
comment on column sys_client.activity_timeout is 'token活跃超时时间'; comment on column sys_client.device_type is '设备类型';
comment on column sys_client.active_timeout is 'token活跃超时时间';
comment on column sys_client.timeout is 'token固定超时'; comment on column sys_client.timeout is 'token固定超时';
comment on column sys_client.status is '状态0正常 1停用'; comment on column sys_client.status is '状态0正常 1停用';
comment on column sys_client.del_flag is '删除标志0代表存在 2代表删除'; comment on column sys_client.del_flag is '删除标志0代表存在 2代表删除';
@ -1233,8 +1235,8 @@ comment on column sys_client.create_time is '创建时间';
comment on column sys_client.update_by is '更新者'; comment on column sys_client.update_by is '更新者';
comment on column sys_client.update_time is '更新时间'; comment on column sys_client.update_time is '更新时间';
insert into sys_client values (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 1800, 604800, 0, 0, 103, 1, sysdate, 1, sysdate); insert into sys_client values (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 'pc', 1800, 604800, 0, 0, 103, 1, sysdate, 1, sysdate);
insert into sys_client values (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 1800, 604800, 0, 0, 103, 1, sysdate, 1, sysdate); insert into sys_client values (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 'app', 1800, 604800, 0, 0, 103, 1, sysdate, 1, sysdate);
-- ---------------------------- -- ----------------------------

View File

@ -1226,7 +1226,8 @@ create table sys_client (
client_key varchar(32) ''::varchar, client_key varchar(32) ''::varchar,
client_secret varchar(255) ''::varchar, client_secret varchar(255) ''::varchar,
grant_type varchar(255) ''::varchar, grant_type varchar(255) ''::varchar,
activity_timeout int4 default 1800, device_type varchar(32) ''::varchar,
active_timeout int4 default 1800,
timeout int4 default 604800, timeout int4 default 604800,
status char(1) default '0'::bpchar, status char(1) default '0'::bpchar,
del_flag char(1) default '0'::bpchar, del_flag char(1) default '0'::bpchar,
@ -1244,7 +1245,8 @@ comment on column sys_client.client_id is '客户端id';
comment on column sys_client.client_key is '客户端key'; comment on column sys_client.client_key is '客户端key';
comment on column sys_client.client_secret is '客户端秘钥'; comment on column sys_client.client_secret is '客户端秘钥';
comment on column sys_client.grant_type is '授权类型'; comment on column sys_client.grant_type is '授权类型';
comment on column sys_client.activity_timeout is 'token活跃超时时间'; comment on column sys_client.device_type is '设备类型';
comment on column sys_client.active_timeout is 'token活跃超时时间';
comment on column sys_client.timeout is 'token固定超时'; comment on column sys_client.timeout is 'token固定超时';
comment on column sys_client.status is '状态0正常 1停用'; comment on column sys_client.status is '状态0正常 1停用';
comment on column sys_client.del_flag is '删除标志0代表存在 2代表删除'; comment on column sys_client.del_flag is '删除标志0代表存在 2代表删除';
@ -1254,8 +1256,8 @@ comment on column sys_client.create_time is '创建时间';
comment on column sys_client.update_by is '更新者'; comment on column sys_client.update_by is '更新者';
comment on column sys_client.update_time is '更新时间'; comment on column sys_client.update_time is '更新时间';
insert into sys_client values (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 1800, 604800, 0, 0, 103, 1, now(), 1, now()); insert into sys_client values (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 'pc', 1800, 604800, 0, 0, 103, 1, now(), 1, now());
insert into sys_client values (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 1800, 604800, 0, 0, 103, 1, now(), 1, now()); insert into sys_client values (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 'app', 1800, 604800, 0, 0, 103, 1, now(), 1, now());
-- 字符串自动转时间 避免框架时间查询报错问题 -- 字符串自动转时间 避免框架时间查询报错问题
create or replace function cast_varchar_to_timestamp(varchar) returns timestamptz as $$ create or replace function cast_varchar_to_timestamp(varchar) returns timestamptz as $$

View File

@ -861,7 +861,8 @@ create table sys_client (
client_key varchar(32) default null comment '客户端key', client_key varchar(32) default null comment '客户端key',
client_secret varchar(255) default null comment '客户端秘钥', client_secret varchar(255) default null comment '客户端秘钥',
grant_type varchar(255) default null comment '授权类型', grant_type varchar(255) default null comment '授权类型',
activity_timeout int(11) default 1800 comment 'token活跃超时时间', device_type varchar(32) default null comment '设备类型',
active_timeout int(11) default 1800 comment 'token活跃超时时间',
timeout int(11) default 604800 comment 'token固定超时', timeout int(11) default 604800 comment 'token固定超时',
status char(1) default '0' comment '状态0正常 1停用', status char(1) default '0' comment '状态0正常 1停用',
del_flag char(1) default '0' comment '删除标志0代表存在 2代表删除', del_flag char(1) default '0' comment '删除标志0代表存在 2代表删除',
@ -873,5 +874,5 @@ create table sys_client (
primary key (id) primary key (id)
) engine=innodb comment='系统授权表'; ) engine=innodb comment='系统授权表';
insert into sys_client values (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 1800, 604800, 0, 0, 103, 1, sysdate(), 1, sysdate()); insert into sys_client values (1, 'e5cd7e4891bf95d1d19206ce24a7b32e', 'pc', 'pc123', 'password,social', 'pc', 1800, 604800, 0, 0, 103, 1, sysdate(), 1, sysdate());
insert into sys_client values (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 1800, 604800, 0, 0, 103, 1, sysdate(), 1, sysdate()); insert into sys_client values (2, '428a8310cd442757ae699df5d894f051', 'app', 'app123', 'password,sms,social', 'app', 1800, 604800, 0, 0, 103, 1, sysdate(), 1, sysdate());

View File

@ -3083,7 +3083,8 @@ CREATE TABLE sys_client
client_key nvarchar(255) DEFAULT '' NULL, client_key nvarchar(255) DEFAULT '' NULL,
client_secret nvarchar(255) DEFAULT '' NULL, client_secret nvarchar(255) DEFAULT '' NULL,
grant_type nvarchar(255) DEFAULT '' NULL, grant_type nvarchar(255) DEFAULT '' NULL,
activity_timeout int DEFAULT ((1800)) NULL, device_type nvarchar(32) DEFAULT '' NULL,
active_timeout int DEFAULT ((1800)) NULL,
timeout int DEFAULT ((604800)) NULL, timeout int DEFAULT ((604800)) NULL,
status nchar(1) DEFAULT ('0') NULL, status nchar(1) DEFAULT ('0') NULL,
del_flag nchar(1) DEFAULT ('0') NULL, del_flag nchar(1) DEFAULT ('0') NULL,
@ -3130,10 +3131,16 @@ EXEC sp_addextendedproperty
'COLUMN', N'grant_type' 'COLUMN', N'grant_type'
GO GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'设备类型',
'SCHEMA', N'dbo',
'TABLE', N'sys_client',
'COLUMN', N'device_type'
GO
EXEC sp_addextendedproperty
'MS_Description', N'token活跃超时时间', 'MS_Description', N'token活跃超时时间',
'SCHEMA', N'dbo', 'SCHEMA', N'dbo',
'TABLE', N'sys_client', 'TABLE', N'sys_client',
'COLUMN', N'activity_timeout' 'COLUMN', N'active_timeout'
GO GO
EXEC sp_addextendedproperty EXEC sp_addextendedproperty
'MS_Description', N'token固定超时', 'MS_Description', N'token固定超时',
@ -3189,7 +3196,7 @@ EXEC sp_addextendedproperty
'TABLE', N'sys_client' 'TABLE', N'sys_client'
GO GO
INSERT INTO sys_client VALUES (N'1', N'e5cd7e4891bf95d1d19206ce24a7b32e', N'pc', N'pc123', N'password,social', 1800, 604800, N'0', N'0', 103, 1, getdate(), 1, getdate()) INSERT INTO sys_client VALUES (N'1', N'e5cd7e4891bf95d1d19206ce24a7b32e', N'pc', N'pc123', N'password,social', N'pc', 1800, 604800, N'0', N'0', 103, 1, getdate(), 1, getdate())
GO GO
INSERT INTO sys_client VALUES (N'2', N'428a8310cd442757ae699df5d894f051', N'app', N'app123', N'password,sms,social', 1800, 604800, N'0', N'0', 103, 1, getdate(), 1, getdate()) INSERT INTO sys_client VALUES (N'2', N'428a8310cd442757ae699df5d894f051', N'app', N'app123', N'password,sms,social', N'app', 1800, 604800, N'0', N'0', 103, 1, getdate(), 1, getdate())
GO GO