系统授权码接入

集成koca的OEM业务组件,替换原有的系统管理模块中的应用授权码功能,支持系统的授权以及模块的授权功能:

  • 系统授权:通过在主类上增加注解,如果授权码过期则程序无法启动。

  • 模块授权:通过在接口上增加注解,如果授权码过期则返回定义的报错信息,如果授权码仍然有效则返回授权码剩余天数(仅各大登录接口返回天数,其余接口返回值不变)。

如何集成?

1、引入依赖

<dependency>
    <groupId>com.szkingdom.koca.admin</groupId>
    <artifactId>koca-admin-oem-client</artifactId>
    <version>4.0.0</version>
</dependency>

2、增加认证类

@Primary
@Component
public class KemsVerifier extends DefaultLicenseVerifier implements LicenseVerifier {

    private static String endTime;

    public static String getEndTime() {
        return endTime;
    }

    @Override
    public VerifyResult verify(LicenseFactor licenseFactor) {
        if (licenseFactor == null) {
            return VerifyResult.fail("授权码为空值!");
        }

        String startTime = licenseFactor.getStartTime();
        String endTime = licenseFactor.getEndTime();
        String authType = licenseFactor.getAuthType();

        // 根据授权类型,校验到期时间
        if (!CheckUtils.checkEndTime(endTime)) {
            // 试用版/默认(到期即不可用)
            if (authType == null || !authType.equals(AuthType.OFFICIAL.getType())) {
                return VerifyResult.fail("授权码已到期!" + licenseFactor.toPrintString());
            }
            // 正式版(到期一年后不可用)
            if (!CheckUtils.checkEndTimeOneYear(endTime)) {
                return VerifyResult.fail("授权码已过期超一年!" + licenseFactor.toPrintString());
            }
            log.warn("授权码已到期!请于到期一年内向管理员重新获取授权码!否则将影响您的使用!" + licenseFactor.toPrintString());
        }

        // 校验起始时间
        if (!CheckUtils.checkStartTime(startTime)) {
            return VerifyResult.fail("授权码未生效!" + licenseFactor.toPrintString());
        }

        KemsVerifier.endTime = endTime;
        VerifyResult.success(endTime);
    }
}

3、增加注解

模块授权:在需要检验的接口上增加注解

@VLicense(model = "login", vClass = KemsVerifier.class)

系统授权:在主类上增加注解

@VLicense(system = "kems", version = "3.4.0", vClass = KemsVerifier.class)

注:

3.2.1+版本kems默认在支持的用户名密码登录,短信验证码登录,统一身份认证登录,企业微信扫码登录接口增加模块授权注解且剩余有效期。

3.4.0+版本kems默认额外在module-system模块启动类增加系统授权注解且剩余有效期

如何返回剩余有效期?

以用户名密码登录为例, 登录成功之后,在接口的返回值中增加days属性和appLicenseMsg属性

days: license的剩余有效期

  • 如果剩余有效期大于等于0小于等于30天,前端将loginMsg+appLicenseMsg进行黄色展示

  • 如果有效期大于30天,则仍旧将loginMsg进行绿色展示

  • 如果剩余有效期小于0,则会以红色的报错告知,登录失败授权码已过期

appLicenseMsg: 登录成功后的提示信息

// 构造others 包含授权码剩余有效期
Map<String, Object> others = new HashMap<>(12);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
others.put("loginMsg", SystemResultMessage.RECENT_LOGIN_TIME.getMessage() +
sdf.format(logininforDTO.getAccessTime()) + "   " + SystemResultMessage.LOGIN_IP.getMessage() +
logininforDTO.getIpaddr());

// 解析字符串为LocalDate对象
LocalDate givenDate = LocalDate.parse(KemsVerifier.getEndTime(), DateTimeFormatter.BASIC_ISO_DATE);
// 计算相差天数
Duration diff = Duration.between(LocalDate.now().atStartOfDay(), givenDate.atStartOfDay());
long days = diff.toDays();
others.put("days", days);
others.put("appLicenseMsg", SystemResultMessage.AUTHORIZATION_REMAINING_TIME.getMessage() + days
+ SystemResultMessage.DAY.getMessage());
trustedPrincipal.setOthers(others);

return Result.success(SystemResultMessage.LOGIN_SUCCESS, trustedPrincipal);

注:如果接口没有返回days属性和appLicenseMsg属性,则升级网关pom中认证插件的版本

如果使用的是kems2.4.0及以下版本

<dependency>
    <groupId>szkingdom.jzyq.taoism.kems.plug</groupId>
    <artifactId>kems-plug-auth-webflux</artifactId>
    <version>2.4.1</version>
</dependency>

如果使用的是kems3.0.0及以上版本,则引入认证插件的版本号>=3.2.1

<dependency>
    <groupId>com.kingengine.kems.plug</groupId>
    <artifactId>kems-plug-auth-webflux</artifactId>
    <version>3.x.x</version>
</dependency>

4、新增配置

在application.yml中增加如下配置

koca:
  oem:
    publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtr5WsvT+QC7IgWyb0FKP75+x8a9AWpsu1eLg0OzS97IBkohz+1NRdOLEo0w6jIxmY0afYqSeyQkUhifxD+RLUbq7CYPbI4Biz4tqpiq9nkJ3iCiekyS5cJi0JvE72VP5KFG2FrtifpLG0Xz3NpiBtzZEKsYQCL+OgFVhVvo+Mx0u/1+ichOiom1eMYLhRkcDzgCU+3WZxU1FCxA+WKI+qWa8gzcUpZMW9UP8GUMzcbq2Xgw7x5pUfNkzs6Zlw6UMyAFmLNmXsrCn0kTFY1UUFNLcqBV3dW+JM/C4FJb9dzTzOlNjd1hSs9rDyHXyinGvx7ZMmvyDE45V84uV5knOWwIDAQAB

注: publicKey请联系韩朋成

5、增加授权文件

license.txt需和jar包放于服务器的同一目录下,每行为独立的一条授权码(本地是放于resource下,服务器不同!!),如下图所示:

license

注: license.txt授权文件请联系韩朋成

Copyright © 2017-2023 深圳金证引擎科技有限公司 all right reserved,powered by Gitbook该文件最后修订时间: 2023-10-18 09:43:39

results matching ""

    No results matching ""