泛微OA服务器获取 token
创始人
2025-01-21 07:04:48
0

泛微OA服务器获取 token

文章目录

      • 泛微OA服务器获取 token
        • 一、泛微官方方法
          • 1 ecology 系统配置
          • 2 发放/生成许可证(appid)
          • 3 限制许可证使用ip地址(该步骤也可以跳过)
          • 4 使用 postman 注册
          • 5 获取 token
          • 6 访问业务系统接口
        • 二、java 代码获取 token
        • 三、封装到 OA 系统获取 token

对于获取 token,其实泛微官方的文档提供了方法,大致步骤是:数据库插入 appid-> 注册 -> 拿到 spk 和 secret 后加密作为 secret -> spk 和用户 id 加密才是真正的 userid -> 根据加密后的 secret 和 appid 获取 token。

整个步骤比较繁琐,此处本人演示原始泛微的方法和本人封装过后的简单方法。


一、泛微官方方法

泛微官方获取 token:https://e-cloudstore.com/doc.html

以下步骤与官方提供的方法存在重复,本次为了详细讲解也重复讲解。

1 ecology 系统配置

在ecology系统代码目录中找到以下配置文件:ecology/WEB-INF/prop/weaver_session_filter.properties

checkurl=/api/hrm/emmanager;/api/userPhrase; uncheckurl=/api/ec/dev/app/getCheckSystemInfo;/api/ec/dev/app/emjoin; unchecksessionurl=/api/ec/dev/util/accesspage;.../api/loginportal/element/;/api/edc/fillin/; 

在 unchecksessionurl= 后面添加 /api/ec/dev/auth/regist;/api/ec/dev/auth/applytoken;配置后的白名单需要重启生效。


2 发放/生成许可证(appid)

向数据库插入一条记录,之后访问的话会匹配这条记录,用于身份认证,在ecology系统数据库执行以下脚本示例:

INSERT INTO ECOLOGY_BIZ_EC(ID,APPID,NAME) VALUES('123456','test','上海泛微网络科技股份有限公司'); COMMIT; 

字段描述:

  • ID:数据库主键。保证与其它系统发放的许可证在数据库中的主键标识不冲突即可(对应示例:123456)
  • APPID:许可证号码。最终发放给异构系统的许可证号码,多个许可证号码保证唯一(对应示例:test)
  • NAME:许可证名称。用于快速辨识许可证发放系统(对应示例:上海泛微网络科技股份有限公司)

网络上提供了随机生成字母-数字的字符串,比如:http://tool.pfan.cn/random

随机生成一个 32 位的即可,也可以为其他位数,本次演示使用随机生成的:E6PMNPX0A7I1T1JX5LDKPTLLD2S5KK60


3 限制许可证使用ip地址(该步骤也可以跳过)

在ecology系统代码目录中找到以下配置文件:ecology/WEB-INF/prop/weaver_rest_token.properties

// 限制Rest API Token Invoke注册端IP地址,多个IP地址之间用逗号分隔 // 例如:allowIp=127.0.0.1,192.168.0.1,172.10.0.1,10.10.10.01 allowIp= 

在 allowIp= 后面添加客户调用方服务器实际的ip地址(不设置将代表不限制任何ip,生产环境建议设置)


4 使用 postman 注册

注册接口:/api/ec/dev/auth/regist

在请求头里携带 appid,获取 spk 和 secret。

注意:spk 和 secret 只需要注册一次,如果重复注册则 spk 和 secret 会进行变化,获取 token 的时候也要记得更换 spk 和 secret。
在这里插入图片描述
拿到 spk 和 secret 后,加密 secret:

网址:https://the-x.cn/Cryptography/Rsa.aspx

在这里插入图片描述


5 获取 token

获取 token 接口:/api/ec/dev/auth/applytoken

步骤 4 拿到加密后的 secret 后,把 appid 和 secret 放在请求头内获取:

在这里插入图片描述

6 访问业务系统接口

步骤 5 拿到了 token,但此时只根据 token 还不能访问业务系统接口,需要具体的 userId,userId 也不是OA系统中人员的id,而是人员 id 和 spk 经过加密处理的字符串。

在这里插入图片描述

此处演示获取已处理流程列表,接口地址:/api/workflow/paService/getHandledWorkflowRequestList

在这里插入图片描述

成功访问了接口。


二、java 代码获取 token

appid、spk、加密后的 secret 都是方法一中第一次注册后的数据,需要记录直接使用。

依赖:

          cn.hutool       hutool-all       5.7.17                   com.alibaba       fastjson       1.2.66    

代码:

public class TestGetToken {      // 封装泛微获取 token 的接口     public static void main(String[] args) {         // 存入 token-appid-用户id加密后的scrict,返回给客户端         Map apiData = new HashMap<>();         // spk、Secret第一次注册就固定的参数,userid为测试写入         String spk = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAixdL/I2LFv9pf77Ui8/raj2RiDvh+WPcMTW0h/zGs1JkWSA19AnqopmPdUWCfTm/KTF0m1SuWjJRk4T/l4SobUzDg6ZZtKbvjGa4mpcg1i6BIM4pfpL6zqF+xgAf+Zwz/w/cL1844ITzAgQZAQoFyRB8v3luGK/uq+9swAz/QuMsHfOw8mkGeTAo00xLd4I9kN1/UsbhXuIXR34e7SnMidJAd4NXVp60WuBjjaq2Rpp/3LdE/uZdeGkWpwN6/9ZHEAukW2NisUx3OlD7s2T4XGd3MoNX0gz+AvDutCp1WrD1ltbbaXyqrvMpsPkg3XaSTD/dTo8gYhIA4NcAGfUOqQIDAQAB";         String Secret = "de4ab3cb-1b06-4dd4-9f1b-192d158b5114";          String userId = "10795"; // 本人OA系统中的userid,在代码中直接写入测试         String encryptUserId  = new RSA(null, spk).encryptBase64(userId, StandardCharsets.UTF_8, KeyType.PublicKey); // RSA加密          // 公钥加密, 所以RSA对象私钥为null         RSA rsa = new RSA(null, spk);         // 对秘钥进行加密传输,防止篡改数据         String encryptSecret = rsa.encryptBase64(Secret, StandardCharsets.UTF_8, KeyType.PublicKey);         String result = httpRequest(apiData, encryptSecret, encryptUserId);         System.out.println(JSONUtil.parseObj(result));     }      /**      * 调用ECOLOGY系统接口进行注册      * @param apiData      * @param encryptSecret      * @param encryptUserId      * @return      */     private static String httpRequest(Map apiData, String encryptSecret, String encryptUserId) {         String uri = "/api/ec/dev/auth/applytoken"; // 获取token接口         String appid = "E6PMNPX0A7I1T1JX5LDKPTLLD2S5KK60"; // appid 为自定义插入数据库的appid,需与数据库保持一致          String datas = HttpRequest.post("http://192.168.190.5:8080" + uri)                 .header("appid", appid)                 .header("secret", encryptSecret)                 .header("time", "3600") // 过期时间                 .execute().body();          Map dataMap = JSONUtil.parseObj(datas);         String token = (String) dataMap.get("token");         apiData.put("appid", appid);         apiData.put("token", token);         apiData.put("encryptUserId", encryptUserId);         return JSON.toJSONString(apiData);     }  } 

代码效果:
在这里插入图片描述


三、封装到 OA 系统获取 token

步骤二的方法相对于泛微提供的方法,已经做了很好的简化,但如果只想使用 postman 来获取,我们可以把获取 token 封装成一个接口,打包到 OA 系统中,这样就大大简化了获取 token 的步骤。

具体需求,使用 post 方法,在请求体内传入工号,通过工号获取 userid 获取 token,代码如下:

获取 token 步骤:

  • 1、数据库插入 appid
  • 2、ecology/WEB-INF/prop/weaver_session_filter.properties 配置token接口
  • 3、/api/ec/dev/auth/regist 请求头携带 appid 注册(返回secret、spk)
  • 4、/api/ec/dev/auth/applytoken 请求头携带 appid、加密后的 secret 获取 token
  • 5、拿到 token,spk 和 userid 加密后返回 userid,访问业务系统接口。

依赖:

      cn.hutool     hutool-all     5.7.17  

GetToKenByWorkCode .java

@Path("/test/testGetToken") public class getToKenByWorkCode extends GetToKenByWorkCode { } 

LoginRegist.java

public class GetToKenByWorkCode {     private static final Logger logger = LoggerFactory.getLogger(LoginFilter.class);      @POST     @Path("/getToKenByWorkCode")     @Produces(MediaType.APPLICATION_JSON)     public String ecPost(Map params) {         Map apiData = new HashMap<>();         String spk = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAixdL/I2LFv9pf77Ui8/raj2RiDvh+WPcMTW0h/zGs1JkWSA19AnqopmPdUWCfTm/KTF0m1SuWjJRk4T/l4SobUzDg6ZZtKbvjGa4mpcg1i6BIM4pfpL6zqF+xgAf+Zwz/w/cL1844ITzAgQZAQoFyRB8v3luGK/uq+9swAz/QuMsHfOw8mkGeTAo00xLd4I9kN1/UsbhXuIXR34e7SnMidJAd4NXVp60WuBjjaq2Rpp/3LdE/uZdeGkWpwN6/9ZHEAukW2NisUx3OlD7s2T4XGd3MoNX0gz+AvDutCp1WrD1ltbbaXyqrvMpsPkg3XaSTD/dTo8gYhIA4NcAGfUOqQIDAQAB";         String appid = "E6PMNPX0A7I1T1JX5LDKPTLLD2S5KK60";         String Secret = "de4ab3cb-1b06-4dd4-9f1b-192d158b5114";         String workcode = params.get("workcode").toString();         RecordSetDataSource rs = new RecordSetDataSource();         String encryptUserId;         rs.execute("select id from hrmresource where workcode='" + workcode + "'");         if (rs.next()) {             String userId = rs.getString("id");             encryptUserId = new RSA(null, spk).encryptBase64(userId, StandardCharsets.UTF_8, KeyType.PublicKey);         } else if ("1".equals(workcode)) {             encryptUserId = new RSA(null, spk).encryptBase64("1", StandardCharsets.UTF_8, KeyType.PublicKey);         } else {             return "工号不存在";         }         final String uri = "/api/ec/dev/auth/applytoken";         // 公钥加密,所以RSA对象私钥为null         RSA rsa = new RSA(null, spk);         //对秘钥进行加密传输,防止篡改数据         String encryptSecret = rsa.encryptBase64(Secret, StandardCharsets.UTF_8, KeyType.PublicKey);          //调用ECOLOGY系统接口进行注册         String datas = HttpRequest.post("http://192.168.190.5:8080" + uri)                 .header("appid", appid)                 .header("secret", encryptSecret)                 .header("time", "3600")                 .execute().body();          Map dataMap = JSONUtil.parseObj(datas);         String token = (String) dataMap.get("token");         apiData.put("appid", appid);         apiData.put("token", token);         apiData.put("encryptUserId", encryptUserId);         return JSON.toJSONString(apiData);      } } 

效果演示:

在这里插入图片描述
注意:记得把 /api/test/testGetToken/getToKenByWorkCode 这个接口配置在白名单中,白名单位置:ecology/WEB-INF/prop/weaver_session_filter.properties

在这里插入图片描述

如果需要使用 idea 打断点调试代码,可以在 /home/comen/weaver/Resin4/conf/resin.properties 中配置调试的端口:

在这里插入图片描述

然后在 idea 中配置,就可以调试指定服务器 ip 的代码:

在这里插入图片描述

相关内容

热门资讯

关于透视!xpoker透视辅助... 关于透视!xpoker透视辅助,拱趴大菠萝机器人(透视)切实是真的有辅助攻略(哔哩哔哩)1、拱趴大菠...
了解透视!智星德州插件怎么下载... 了解透视!智星德州插件怎么下载,来玩app 德州 辅助(透视)果然有辅助技巧(哔哩哔哩)1、下载好智...
分享透视!德州圈脚本,stea... 分享透视!德州圈脚本,steampokermaster辅助(透视)果然一直总是有辅助插件(哔哩哔哩)...
总结透视!约局吧如何查看是否有... 总结透视!约局吧如何查看是否有挂,hardrock作必弊(透视)一直有辅助方法(哔哩哔哩)进入游戏-...
有挂透视!来玩app 德州 辅... 有挂透视!来玩app 德州 辅助,pokemmo辅助器(透视)真是真的有辅助方法(哔哩哔哩)该软件可...
详细透视!pokemmo辅助器... 详细透视!pokemmo辅助器手机版下载,拱趴大菠萝万能辅助器(透视)本来真的是有辅助插件(哔哩哔哩...
揭幕透视!德州透视是真的吗,拱... 揭幕透视!德州透视是真的吗,拱趴大菠萝辅助神器(透视)原来存在有辅助app(哔哩哔哩)1、进入到拱趴...
揭幕透视!werplan透视挂... 揭幕透视!werplan透视挂,德州透视是真的假的(透视)总是真的有辅助技巧(哔哩哔哩)1、超多福利...
解谜透视!sohoopoker... 解谜透视!sohoopoker辅助,红龙poker辅助工具(透视)真是一直都是有辅助攻略(哔哩哔哩)...
总结透视!拱趴大菠萝十三水作必... 总结透视!拱趴大菠萝十三水作必弊,德州辅助工具到底怎么样(透视)本来存在有辅助方法(哔哩哔哩)1、许...