From 57f7d9343a056bcd7c9bedbafe9d7dda5b10a7bc Mon Sep 17 00:00:00 2001 From: smallchill Date: Thu, 28 May 2020 13:26:48 +0800 Subject: [PATCH] =?UTF-8?q?:zap:=20=E5=A2=9E=E5=8A=A0=E7=A7=9F=E6=88=B7?= =?UTF-8?q?=E8=B4=A6=E5=8F=B7=E6=8E=88=E6=9D=83=E7=A0=81=E4=BF=9D=E6=8A=A4?= =?UTF-8?q?=E6=9C=BA=E5=88=B6=EF=BC=8C=E9=98=B2=E6=AD=A2=E7=A7=81=E6=9C=89?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E5=AE=A2=E6=88=B7=E7=AF=A1=E6=94=B9=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=BA=93=E5=A2=9E=E5=8A=A0=E8=B4=A6=E5=8F=B7=E6=97=B6?= =?UTF-8?q?=E9=97=B4=E5=92=8C=E8=B4=A6=E5=8F=B7=E9=A2=9D=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/springblade/auth/utils/TokenUtil.java | 22 ++++++++++++++++ .../common/constant/TenantConstant.java | 7 +++++ .../org/springblade/system/entity/Tenant.java | 5 ++++ .../system/controller/TenantController.java | 9 +------ .../system/mapper/TenantMapper.xml | 1 + .../system/service/ITenantService.java | 11 ++++++++ .../service/impl/TenantServiceImpl.java | 26 +++++++++++++++++++ .../user/service/impl/UserServiceImpl.java | 9 +++++++ doc/nacos/blade.yaml | 1 + 9 files changed, 83 insertions(+), 8 deletions(-) diff --git a/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java b/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java index e7d048b7..a06d12a4 100644 --- a/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java +++ b/blade-auth/src/main/java/org/springblade/auth/utils/TokenUtil.java @@ -17,8 +17,11 @@ package org.springblade.auth.utils; import lombok.SneakyThrows; +import org.springblade.common.constant.TenantConstant; import org.springblade.core.launch.constant.TokenConstant; +import org.springblade.core.tenant.BladeTenantProperties; import org.springblade.core.tool.constant.BladeConstant; +import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.utils.*; import org.springblade.system.entity.Tenant; import org.springframework.security.authentication.BadCredentialsException; @@ -69,6 +72,20 @@ public class TokenUtil { public final static String HEADER_PREFIX = "Basic "; public final static String DEFAULT_AVATAR = ""; + private static BladeTenantProperties tenantProperties; + + /** + * 获取租户配置 + * + * @return tenantProperties + */ + private static BladeTenantProperties getTenantProperties() { + if (tenantProperties == null) { + tenantProperties = SpringUtil.getBean(BladeTenantProperties.class); + } + return tenantProperties; + } + /** * 解码 */ @@ -143,6 +160,11 @@ public class TokenUtil { return false; } Date expireTime = tenant.getExpireTime(); + if (getTenantProperties().getLicense()) { + String licenseKey = tenant.getLicenseKey(); + String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY); + expireTime = JsonUtil.parse(decrypt, Tenant.class).getExpireTime(); + } if (expireTime != null && expireTime.before(DateUtil.now())) { throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_TENANT_PERMISSION); } diff --git a/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java b/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java index 945237c7..5f6ae79b 100644 --- a/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java +++ b/blade-common/src/main/java/org/springblade/common/constant/TenantConstant.java @@ -40,15 +40,22 @@ public interface TenantConstant { * 租户默认菜单集合KEY */ String ACCOUNT_MENU_CODE_KEY = "tenant.default.menuCode"; + /** * 租户默认密码 */ String DEFAULT_PASSWORD = "123456"; + /** + * 租户授权码默认16位密钥 + */ + String DES_KEY = "0000000000000000"; + /** * 租户默认账号额度 */ Integer DEFAULT_ACCOUNT_NUMBER = -1; + /** * 租户默认菜单集合 */ diff --git a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java index 46755aa6..6f6bda15 100644 --- a/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java +++ b/blade-service-api/blade-system-api/src/main/java/org/springblade/system/entity/Tenant.java @@ -88,6 +88,11 @@ public class Tenant extends BaseEntity { @JsonFormat(pattern = DateUtil.PATTERN_DATETIME) @ApiModelProperty(value = "过期时间") private Date expireTime; + /** + * 授权码 + */ + @ApiModelProperty(value = "授权码") + private String licenseKey; } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java b/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java index 6bc4d33f..2e5b4230 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/controller/TenantController.java @@ -147,14 +147,7 @@ public class TenantController extends BladeController { @ApiOperation(value = "授权配置", notes = "传入ids,accountNumber,expireTime") @PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR) public R setting(@ApiParam(value = "主键集合", required = true) @RequestParam String ids, @ApiParam(value = "账号额度") Integer accountNumber, @ApiParam(value = "过期时间") Date expireTime) { - CacheUtil.clear(SYS_CACHE); - boolean temp = tenantService.update( - Wrappers.update().lambda() - .set(Tenant::getAccountNumber, accountNumber) - .set(Tenant::getExpireTime, expireTime) - .in(Tenant::getId, Func.toLongList(ids)) - ); - return R.status(temp); + return R.status(tenantService.setting(accountNumber, expireTime, ids)); } /** diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml index 68772f58..3c94fc1d 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml +++ b/blade-service/blade-system/src/main/java/org/springblade/system/mapper/TenantMapper.xml @@ -20,6 +20,7 @@ + diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java index f6fa9f1a..b2eceb5d 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/ITenantService.java @@ -20,6 +20,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import org.springblade.core.mp.base.BaseService; import org.springblade.system.entity.Tenant; +import java.util.Date; import java.util.List; /** @@ -62,4 +63,14 @@ public interface ITenantService extends BaseService { */ boolean removeTenant(List ids); + /** + * 配置租户授权 + * + * @param accountNumber + * @param expireTime + * @param ids + * @return + */ + boolean setting(Integer accountNumber, Date expireTime, String ids); + } diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java index 7e7ab751..08224bfe 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/TenantServiceImpl.java @@ -16,14 +16,20 @@ */ package org.springblade.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.AllArgsConstructor; +import org.springblade.core.cache.utils.CacheUtil; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; +import org.springblade.core.tenant.BladeTenantProperties; import org.springblade.core.tenant.TenantId; import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.BladeConstant; +import org.springblade.core.tool.jackson.JsonUtil; +import org.springblade.core.tool.support.Kv; +import org.springblade.core.tool.utils.DesUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.system.cache.ParamCache; @@ -42,6 +48,7 @@ import java.util.List; import java.util.stream.Collectors; import static org.springblade.common.constant.TenantConstant.*; +import static org.springblade.core.cache.constant.CacheConstant.SYS_CACHE; /** * 服务实现类 @@ -60,6 +67,7 @@ public class TenantServiceImpl extends BaseServiceImpl imp private final IRoleMenuService roleMenuService; private final IDictBizService dictBizService; private final IUserClient userClient; + private final BladeTenantProperties tenantProperties; @Override public IPage selectTenantPage(IPage page, Tenant tenant) { @@ -172,6 +180,24 @@ public class TenantServiceImpl extends BaseServiceImpl imp return tenantTemp; } + @Override + public boolean setting(Integer accountNumber, Date expireTime, String ids) { + CacheUtil.clear(SYS_CACHE); + Func.toLongList(ids).forEach(id -> { + LambdaUpdateWrapper luw = Wrappers.update().lambda() + .set(Tenant::getAccountNumber, accountNumber) + .set(Tenant::getExpireTime, expireTime) + .eq(Tenant::getId, id); + if (tenantProperties.getLicense()) { + Kv kv = Kv.create().set("accountNumber", accountNumber).set("expireTime", expireTime).set("id", id); + String licenseKey = DesUtil.encryptToHex(JsonUtil.toJson(kv), DES_KEY); + luw.set(Tenant::getLicenseKey, licenseKey); + } + update(luw); + }); + return true; + } + private String getTenantId(List codes) { String code = tenantId.generate(); if (codes.contains(code)) { diff --git a/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java b/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java index cca47194..9cde6429 100644 --- a/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java +++ b/blade-service/blade-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java @@ -23,11 +23,14 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.exceptions.ApiException; import lombok.AllArgsConstructor; import org.springblade.common.constant.CommonConstant; +import org.springblade.common.constant.TenantConstant; import org.springblade.core.log.exception.ServiceException; import org.springblade.core.mp.base.BaseServiceImpl; import org.springblade.core.secure.utils.AuthUtil; +import org.springblade.core.tenant.BladeTenantProperties; import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.BladeConstant; +import org.springblade.core.tool.jackson.JsonUtil; import org.springblade.core.tool.utils.*; import org.springblade.system.cache.ParamCache; import org.springblade.system.cache.SysCache; @@ -66,6 +69,7 @@ public class UserServiceImpl extends BaseServiceImpl implement private final IUserDeptService userDeptService; private final IUserOauthService userOauthService; private final ISysClient sysClient; + private final BladeTenantProperties tenantProperties; @Override @Transactional(rollbackFor = Exception.class) @@ -77,6 +81,11 @@ public class UserServiceImpl extends BaseServiceImpl implement Tenant tenant = SysCache.getTenant(tenantId); if (Func.isNotEmpty(tenant)) { Integer accountNumber = tenant.getAccountNumber(); + if (tenantProperties.getLicense()) { + String licenseKey = tenant.getLicenseKey(); + String decrypt = DesUtil.decryptFormHex(licenseKey, TenantConstant.DES_KEY); + accountNumber = JsonUtil.parse(decrypt, Tenant.class).getAccountNumber(); + } Integer tenantCount = baseMapper.selectCount(Wrappers.query().lambda().eq(User::getTenantId, tenantId)); if (accountNumber != null && accountNumber > 0 && accountNumber <= tenantCount) { throw new ServiceException("当前租户已到最大账号额度!"); diff --git a/doc/nacos/blade.yaml b/doc/nacos/blade.yaml index 3f7ae67d..10493ee7 100644 --- a/doc/nacos/blade.yaml +++ b/doc/nacos/blade.yaml @@ -86,6 +86,7 @@ blade: - /saber/** tenant: enhance: true + license: false column: tenant_id exclude-tables: - blade_user