tiangong-doc tiangong-doc
首页
  • 天宫体系

    • 前端架构
    • 后端架构
    • 扩展功能
    • 打包部署
    • 更新日志
    • 辅助开发平台 (opens new window)
    • 权限平台部署包下载 (opens new window)
  • 基础组件

    • 工作流引擎(待整理)
    • 跨境加签客户端(待整理)
    • 权限平台(待整理)
  • 数字化工具

    • 数字魔方
    • 数据采集
    • 智能导入
    • 数字员工
    • 规则引擎(开发中)
    • 消息引擎(待开发)
    • 智能导出(待开发)
  • 业务算法

    • 南京业务体检(待整理)
    • 智慧长江(待整理)
  • 识别模型

    • 空箱识别(待整理)
    • 智能客服(待整理)
    • OCR识别(待整理)
    • 车牌识别(待整理)
    • 超市停留识别(待整理)
    • 危险品识别(待开发)
    • 超长车识别(待开发)
    • 车辆靠台(待开发)
    • 车辆占用(待开发)
  • 算法模型(待整理)
  • 风控模型(待整理)
  • 海关规则(待整理)
  • 危险品知识(待整理)
  • 组件设计文档(待整理)
  • 数据服务

    • 商品归类服务(待开发)
    • RECP贸易服务(待开发)
    • 商品价格服务(待开发)
    • 业务申报解答(待开发)
    • 报关单状态查询(待开发)
  • 常用开发工具

    • BASE64编解码工具 (opens new window)
    • MD5编码工具 (opens new window)
    • AES/DES加解密 (opens new window)
    • JWT解码工具 (opens new window)
    • ASCII编解码工具 (opens new window)
    • Unicode编解码工具 (opens new window)
    • UTF-8编解码工具 (opens new window)
    • 字符串编解码工具 (opens new window)
    • 通用进制转换工具 (opens new window)
    • 浮点数十进制转换 (opens new window)
    • 在线JSON解析 (opens new window)
    • 在线JS代码格式化工具 (opens new window)
    • CSS可视化工具 (opens new window)
    • XML格式化工具
    • SQL压缩/格式化工具 (opens new window)
    • JSON/XML在线转换 (opens new window)
    • JSON/YAML在线转换 (opens new window)
    • IP地址查询 (opens new window)
    • HTTP在线接口测试 (opens new window)
    • UUID在线生成器 (opens new window)
    • 随机数生成器 (opens new window)
    • 在线文本比对 (opens new window)
  • 研发标准规范(待整理)
  • 国产化适配
首页
  • 天宫体系

    • 前端架构
    • 后端架构
    • 扩展功能
    • 打包部署
    • 更新日志
    • 辅助开发平台 (opens new window)
    • 权限平台部署包下载 (opens new window)
  • 基础组件

    • 工作流引擎(待整理)
    • 跨境加签客户端(待整理)
    • 权限平台(待整理)
  • 数字化工具

    • 数字魔方
    • 数据采集
    • 智能导入
    • 数字员工
    • 规则引擎(开发中)
    • 消息引擎(待开发)
    • 智能导出(待开发)
  • 业务算法

    • 南京业务体检(待整理)
    • 智慧长江(待整理)
  • 识别模型

    • 空箱识别(待整理)
    • 智能客服(待整理)
    • OCR识别(待整理)
    • 车牌识别(待整理)
    • 超市停留识别(待整理)
    • 危险品识别(待开发)
    • 超长车识别(待开发)
    • 车辆靠台(待开发)
    • 车辆占用(待开发)
  • 算法模型(待整理)
  • 风控模型(待整理)
  • 海关规则(待整理)
  • 危险品知识(待整理)
  • 组件设计文档(待整理)
  • 数据服务

    • 商品归类服务(待开发)
    • RECP贸易服务(待开发)
    • 商品价格服务(待开发)
    • 业务申报解答(待开发)
    • 报关单状态查询(待开发)
  • 常用开发工具

    • BASE64编解码工具 (opens new window)
    • MD5编码工具 (opens new window)
    • AES/DES加解密 (opens new window)
    • JWT解码工具 (opens new window)
    • ASCII编解码工具 (opens new window)
    • Unicode编解码工具 (opens new window)
    • UTF-8编解码工具 (opens new window)
    • 字符串编解码工具 (opens new window)
    • 通用进制转换工具 (opens new window)
    • 浮点数十进制转换 (opens new window)
    • 在线JSON解析 (opens new window)
    • 在线JS代码格式化工具 (opens new window)
    • CSS可视化工具 (opens new window)
    • XML格式化工具
    • SQL压缩/格式化工具 (opens new window)
    • JSON/XML在线转换 (opens new window)
    • JSON/YAML在线转换 (opens new window)
    • IP地址查询 (opens new window)
    • HTTP在线接口测试 (opens new window)
    • UUID在线生成器 (opens new window)
    • 随机数生成器 (opens new window)
    • 在线文本比对 (opens new window)
  • 研发标准规范(待整理)
  • 国产化适配
  • 天宫架构

    • 前端架构

    • 后端架构

      • 后端基础功能

        • 天宫框架简介
        • 用户相关
          • 用户信息
          • mock用户
          • 无需用户认证
          • 用户过期时间
          • 根据账号密码登录
          • 其他登录方式
          • 天宫框架token(Authorization)
          • 权限平台token(ssoToken)
          • loginByToken
          • loginBySsoToken
          • 免token访问后台接口
          • token有效期
            • 2. 主启动类加上注解
            • 3. 获取权限平台的菜单目录树
            • 4. resource目录下添加配置文件
            • h4a-config.xml
            • sdk-config.xml
          • 前端集成
          • 注意事项
        • 使用文档
        • 增删改查
      • 开发脚本

    • 打包部署

    • 扩展功能

    • 业务组件

    • 国际化

    • 迁移助手

    • 历史版本

    • 更新日志

    • 开发手册

    • 权限平台

  • 基础架构
  • 天宫架构
  • 后端架构
  • 后端基础功能
2024-05-20
目录

用户相关

# 用户相关

# 用户信息

// 代码中获取用户id
UserContext.getUserId();

// 代码中获取更多用户信息
UserContext.getUserInfo();
1
2
3
4
5

# mock用户

给一个默认的用户, 无需登录就可以使用的, application.yml, 可以配置mock用户的基本信息

image-20240226184220473

配置完成后, 在请求头加固定的认证即可, 后面获取的用户信息都是mock

image-20240226184440082

# 无需用户认证

很多的接口为了给第三方调用, 并且不用登录的情况

image-20240226184647589

说明:

这里配置具体的接口名称

一个 * 匹配一个位置

多个 * 匹配一个或多个位置

# 用户过期时间

image-20240226184821438

# 登录

# 根据账号密码登录

/loginByPwd
这是页面上默认的登录方法
1
2

请求参数

{
    "userName": "tgroot",
    "password": "PON86nyVNQACBX9xO9HUoLKeIkIXAh43rhPyagcdCqODV88fe6nuKrgiEX+4lT6gIvhhuWrFGozLfWZAWVK1yausd7ZZ8yq04zwIRavjdefAcgfY3HJqGOZJpdG4O43jn0Pd2XJHSKGoOEqK+cICjti+OsywmRHNd2ZyopcThZU=",
    "sys": "MAIN",
    "uuid": "5Z3vLu4MojR4xqJ48Gjvp",
    "valCode": "a5df"
}
1
2
3
4
5
6
7

参数说明

字段 说明
userName 登录用户名
password 加密后的密码
sys 系统菜单标识码(默认就是MAIN)
uuid 验证码的uuid
valCode 验证码的值

说明:

这个接口是前端直接调用后端的, 密码是加密好的, 后端如果模拟掉这个方法, 密码需要自己加密, 加密方法: RsaBase64Utils.encrypt(xxx)

valCode为验证码的值, 框架默认了一个固定的9527, 比如小程序或不需要验证码登录的情况, 可以写死9527, 也可以自定义方案

/**
 * @author tingjie.dou
 * @date 2024/5/20 15:23
 * @desc 自己写一个类, 实现EciValCodeAware接口, 记得用@Component, 将类注入到ioc容器中
 */
@Component
public class MyValCodeCheckAware implements EciValCodeAware {


    /**
     * 自定义验证码校验逻辑
     * @param sys 当前系统, 如: MAIN
     * @param code 前端传入的验证码的值
     * @return true表示校验通过, false表示校验失败
     */
    @Override
    public boolean doCheckValCode(String sys, String code) {
        // 伪代码, 如果是微信小程序, 直接返回ture, 后面就不用验证uuid, 和 验证码了
        if ("WXXCX".equals(sys)){
            return true;
        }

        // 返回false,后面会走验证uuid 验证码的逻辑
        return false;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26

# 其他登录方式

  • 依赖注入userLoginService
@Autowired
private UserLoginService userLoginService;
1
2
  • 调用下面相关的方法
// 根据token切换系统
LoginInfo loginByToken(ChangeSysAo ao);

// 根据权限平台token登录
LoginInfo loginBySsoToken(ChangeSysAo ao);

// 根据用户id获取用户以及菜单信息
LoginInfo getLoginInfoByUserId(String userId,String system);

// 根据用户loginNo获取用户以及菜单信息
LoginInfo getLoginInfoByLoginName(String loginName,String system);

// 根据用户mail获取用户以及菜单信息
LoginInfo getLoginInfoByMail(String mail,String system);
1
2
3
4
5
6
7
8
9
10
11
12
13
14

# token相关

token是前端访问后端的令牌, 相当于手持车票才能上车, 开发过程中会涉及到两个token

  • token: 天宫框架的token(全名: Authorization), 在请求的时候必须加在请求头上面的
  • ssoToken: 权限平台的token, 在不同项目间跳转免登录的时候会用到

# 天宫框架token(Authorization)

格式

eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2ODdkMDlhZjcxYTc0Zjk3YTJiNGE4ODU2YWUxOWNjZCIsInN1YiI6IjM2YjRjODFlYzY3NDJmOTZkMGUxYzU5NTMyMTRiNTJhIiwiaWF0IjoxNzA5NTQzMzM5fQ.5NlVWpoeHM7eeuJ-MOjfY7uN7PtQhH0l7JJdnDv-nn4
1

说明:

这是一个JWT工具生成的token, 每次登录成功后, 会在响应里面给出来token

{
    "code": 10002,
    "msg": "操作成功",
    "success": true,
    "traceId": "e175f80c4a8f45dfbe77ae42c44fbf1d",
    "data": {
        "userInfo": {
            // 用户信息省略 ...
        },
        "menuInfo": {
            // 菜单信息省略 ...
        },
        "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2MTYzNTY0YjgwMzY0MjhjYjk2Y2NhN2M4NTRjZmI3ZSIsInN1YiI6IjRjNWE2ODQyNTgxMGFhYTY2MjY3ODRjNjNiMTRmMGExIiwiaWF0IjoxNzA5ODc4MzczfQ.B6wSQPD9gvfcVA9t1fIbGSfak9Tps4DAuHcE-_S4w0M"
    },
    "extendData": null,
    "cacheVersion": "20240307160845"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

登录成功后会保存在redis中:

框架为了方便管理, 会加一个前缀 TG_SSO_TOKEN:

TG_SSO_TOKEN:eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2ODdkMDlhZjcxYTc0Zjk3YTJiNGE4ODU2YWUxOWNjZCIsInN1YiI6IjFjNWE2NTY1ZDYyZDA0MGU0ZGY3MTVhY2EyZjJkMjMyIiwiaWF0IjoxNzA5NTMxMTI2fQ.kchZXrP-bL1SazVXOcn43YgqGaUXwsSd4SdQUHjoV7s
1

# 权限平台token(ssoToken)

格式

9470c7ddfc4744eda1405eb9e91b9094
1

说明:

这个token是由权限平台生成的, 登录成功后会在用户信息内返回

{
    "code": 10002,
    "msg": "操作成功",
    "success": true,
    "traceId": "e175f80c4a8f45dfbe77ae42c44fbf1d",
    "data": {
        "userInfo": {
            "userId": "6163564b8036428cb96cca7c854cfb7e",
            // 省略部分字段 ...
            
            // 权限平台token
            "ssoToken": "ddf338f78a7a494686b1755baf7e1806"
        },
        "menuInfo": {
            // 菜单信息省略 ...
        },
        // 天宫框架token
        "token": "eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiI2MTYzNTY0YjgwMzY0MjhjYjk2Y2NhN2M4NTRjZmI3ZSIsInN1YiI6IjRjNWE2ODQyNTgxMGFhYTY2MjY3ODRjNjNiMTRmMGExIiwiaWF0IjoxNzA5ODc4MzczfQ.B6wSQPD9gvfcVA9t1fIbGSfak9Tps4DAuHcE-_S4w0M"
    },
    "extendData": null,
    "cacheVersion": "20240307160845"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

# loginByToken

两个系统, 都使用同一个权限平台, 使用天宫框架的token完成 天宫框架登录

URL

/loginByToken
1

参数:

{
   "sys":"ECIGW",
   "token":"eyJhbGciOiJIUzI1NiJ9.eyJqdGkiOiIwNWI0ZjgyNmJkMDchZDVhZDExZSI.Ga7FCq5_SgNNyxviy31KtAk_bVg4kxc9vsgczuX2Smwdsf"
}
1
2
3
4

说明

sys: 系统标识, 获取菜单的时候要用到, 在application-dev.yml中有

token: 天宫框架token, 一般前端localStorage中会存储该信息

# loginBySsoToken

两个系统, 都使用同一个权限平台, 使用权限平台的token完成 天宫框架登录

URL

/loginBySsoToken
1

参数:

{
   "sys": "MAIN",
   "token": "9470c7ddfc4744eda1405eb9e91b9094"
}
1
2
3
4

说明

sys: 系统标识, 获取菜单的时候要用到, 在application-dev.yml中有

token: 权限平台token, 一般是前端跳转的时候带过来的

# 免token访问后台接口

很多时候, 系统需要让外部系统访问或者方便调试, 不使用token也能使用

在配置文件 application.yml 中添加排除信息

project:
  token:
    exclude: /appGen/selectPageList
1
2
3

说明:

  • 需要排除多个, 用英文逗号隔开

    project:
      token:
        exclude: /appGen/selectPageList,/appGen/export
    
    1
    2
    3
  • 通配符匹配一个或多个路径

    project:
      token:
        # 匹配一个路径
        exclude: /appGen/*,/appGen/export
        
    ---------------------------------------------------    
    
    project:
      token:
        # 匹配多个路径
        exclude: /appGen/**,/appGen/export
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

# token有效期

框架默认的token有效期是一个小时, 当然有的系统需要更长的时间, 都是可以自己设置的

project:
  token:
    exclude:
    # 设置有效期, 这里单位是秒
    ttl: 3600
1
2
3
4
5

# H4A集成

# 2. 主启动类加上注解

@SpringBootApplication
@EnableH4aLogin
public class MainApplication{
    
}
1
2
3
4
5

# 3. 获取权限平台的菜单目录树

控制台启动后有链接, 浏览器请求后可以直接下载 menu.json

http://localhost:[端口]/h4a/downMenuTree/MAIN
1

将文件放在resource/config/ 下面

# 4. resource目录下添加配置文件

resource资源目录下建一个文件夹, config, 将以下两个文件放入

生产环境如果需要修改, 建议外置h4a配置文件, 在jar包同级目录建一个config文件夹, 将这两个文件放入

给两个文件示范, 以南京体检为例, 简称NJTJ

# h4a-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<application>
    <module name="h4aIdentity">
        <group name="wsCache">
            <!-- cacheControl 值为off为开启缓存,值为on为关闭缓存 -->
            <configValue key="cacheControl">on</configValue>
            <!--cacheTime和cacheClearTime值为缓存设置的参数,默认值即可-->
            <configValue key="cacheTime">300000000</configValue>
            <configValue key="cacheClearTime">1</configValue>
            <!--initialDelay和clearCachePeriod参数默认值即可,无需修改-->
            <configValue key="initialDelay">0</configValue>
            <configValue key="clearCachePeriod">1440</configValue>
        </group>
    </module>
    <module name="passportSSO">
        <group name="passport">
            <!--appID是应用的ID号-->
            <configValue key="appID">ZSCQ</configValue>
            <!--appSlidingTime是应用的过期时间-->
            <configValue key="appSlidingTime">0</configValue>
            <!--idAuthenticationMode是系统支持(要求)认证返回的认证模式-->
            <!--参数值forms是表单认证-->
            <configValue key="idAuthenticationMode">forms</configValue>
            <!--paramT参数默认值即可,无需修改-->
            <configValue key="paramT">token</configValue>
            <!--defaultAuthenticationMode是默认认证方式-->
            <!--formsAuthentication是表单认证-->
            <configValue key="defaultAuthenticationMode">FormsAuthentication</configValue>
        </group>
        <group name="url">
            <!-- logoffAutoRedirect参数即注销是否允许自动跳转 -->
            <configValue key="logoffAutoRedirect">false</configValue>
            <!--请修改为应用系统的主页访问地址,实际地址为应用的相对访问路径,如http://localhost:8080/default/login.jsp,应填写为/login.jsp -->
            <configValue key="logoffToDefaultUriString"></configValue>
            <!-- logOffCallBackUrl的uri是注销回调地址 -->
            <configValue key="logOffCallBackUrl">/h4a/logout</configValue>
            <!-- H4A登录时,如有多个身份,如需选择某个身份登录,选择身份页面配置,例:/sso/selectIdentity.jsp -->
            <configValue key="select_identity_page"> </configValue>
        </group>
        <group name="defaultAuthenticationMode">
            <configValue key="*.jpg">Anonymous</configValue>
            <!-- 默认值即可-->
            <configValue key="*.gif">Anonymous</configValue><!--默认值即可-->
            <configValue key="/anonymous.html">Anonymous</configValue><!--默认值即可-->
            <!--WindowsAuthentication是域认证,默认值-->
            <configValue key="/WindowsAuthentication/*.jsp">WindowsAuthentication</configValue>
            <configValue key="/WindowsAuthentication/test*">WindowsAuthentication</configValue>
        </group>
        <!-- 不需passport filter拦截的页面在次配置,没有不拦截页面,configValue key="url"的值为空 -->
        <group name="notInterceptUrl">
            <!-- start , end , center三种选择 -->
            <configValue key="position">start</configValue>
            <!-- 多个情况下,中间使用","分隔 -->
            <configValue key="url"></configValue>
            <!-- URL解密实现方法,继承cn.gov.customs.casp.sdk.h4a.sso.IPassportDecryption -->
            <configValue key="decryption"></configValue>
        </group>
    </module>
    <module name="SSOAddress">
        <group name="ssoAddress">
            <!-- 海关H4AIPassportSSO接口实现类相对路径,如不继承IPassportSSO接口则不用填写实现类路径 -->
            <!-- 如果配置了自己应用的登录登出,可在自己应用中放入个性化登录数据、信息等, 例如test.cn.gov.customs.ssoDemo.PassPortSSO;请根据实际情况判断是否实现此接口 -->
            <configValue key="PassportManager"></configValue>
        </group>
    </module>
    <module name="h4a_default">
        <group name="wcf_default">
            <configValue key="default_cache_max_capacity">10000</configValue><!--默认值-->
            <configValue key="default_BaseView">CCIC_VIEW</configValue><!--基本视觉-->
            <configValue key="default_Application_nam">NJTJ</configValue><!--应用名称-->
            <configValue key="orgValue">中国海关\\南京海关</configValue><!--应用名称-->
            <!--<configValue key="orgValue">海关总署</configValue>-->
        </group>
        <group name="Intercepter_load_switch">
            <configValue key="Intercepter_Control">false</configValue><!--默认值即可-->
        </group>
    </module>
    <module name="object_param">
        <!-- FrameworkUserInit.initUserObject 中使用的动态配置参数:getBeanObjectsDetail_lastParam为 oguBeanReaderHelper.getBeanObjectsDetail最后一个参数;organizationCategory_lastParam为iOguBeanReader.getBeanObjectParentOrganizations最后一个参数 -->
        <group name="parameter_obj">
            <configValue key="getBeanObjectsDetail_lastParam">PERSON_ID,SIDELINE</configValue>
            <configValue key="organizationCategory_lastParam">CUSTOMS_CODE</configValue>
        </group>
    </module>
</application>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86

# sdk-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<application>
    <module name="h4aIdentity">
        <!-- 海关H4A接口服务地址示例,以下为示例地址。请按照实际环境进行配置,请与H4A人员联系 -->
        <group name="wsAddress">
            <!-- 身份服务:OguReaderService;授权服务:AccreditReaderService;应用注册服务:RegisterAppService -->

            <configValue key="OguReaderService">http://192.168.202.101/CupaaCenterService/OguReaderService.svc</configValue>
            <configValue key="AccreditReaderService">http://192.168.202.101:8085/CupaaDistributedService/AccreditReaderService.svc</configValue>
            <configValue key="RegisterAppService">http://192.168.202.101/AppRegisterService/RegisterAppReaderService.svc</configValue>

        </group>
    </module>
    <module name="passportSSO">
        <!-- 海关H4A单点登录地址示例,以下为示例地址。请按照实际环境进行配置 -->
        <group name="url">
            <!--示例: H4A供参考-->
            <!-- authenticateUrl uri是认证地址-->
            <configValue key="authenticateUrl">http://192.168.202.101/Passport/SsoLogin.aspx</configValue>

            <configValue key="logOffUrl">http://192.168.202.101/Passport/LogOff.aspx</configValue>
        </group>
    </module>
</application>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

# 前端集成

# 文件 .env
# 登录启用 H4A
VITE_TG_LOGIN_H4A = 'true'
# H4A 访问的前端地址: 如果访问地址有变更,请配置如下字段
VITE_H4A_URL = 'http://localhost:60002/#/login'
1
2
3
4
5

# 注意事项

  1. 公司权限平台无需部署
  2. 权限平台的菜单树如有更新, 需要一起更新menu.json
  3. 用户数据从H4A获取

# 扩展功能

框架给开发人员提供了很多扩展的钩子方法供开发人员去实现

  1. 登录回调
UserInfoAware接口
 - loginPostProcessor 登录成功的回调, 可以做一些动作, 比如发送邮件, 记录日志...
 - loginFailPostProcessor  登录失败的回调
 - logoutPostProcessor  退出登录的回调
1
2
3
4
上次更新: 2024/5/21 14:16:13
天宫框架简介
使用文档

← 天宫框架简介 使用文档→

最近更新
01
EciReport模板导出_Core
09-10
02
EciReport模板导出
09-09
03
Core权限平台接口
07-25
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式