`

开源协同OA办公平台教程:O2OA服务管理中,接口的调用权限

阅读更多

 本文介绍O2OA服务管理中,接口的权限设定和调用方式。

 

适用版本:5.4及以上版本

 

创建接口

 

具有服务管理设计权限的用户(具有ServiceManager角色或Manager角色)打开“服务管理平台”,进入接口配置视图,点击左上角的新建按钮,可创建一个新的接口。

 

 

新建接口后,在右侧属性栏中有两个配置和调用权限有关,一个是“允许访问的地址表达式”,一个收是“启用鉴权”。

 

 

允许访问的地址表达式

 

此处允许输入一个正则表达式,用来匹配调用接口的客户端的Remote_Addr,只有匹配通过,接口才允许执行。例如只允许172.16.1.50到172.16.1.56地址调用接口,可以在此处输入:

 

172\.16\.1\.5[0-6]

 

启用鉴权

 

此处选择“是”的话,就需要在调用接口时传入client名称和一个加密后的token。所以我们先需要一组鉴权配置。

 

具有管理员权限的用户(具有Manager角色),打开“系统设置”-“系统SSO配置”,找到“鉴权配置”。

 

 

点击“添加鉴权配置”:

 

 

此处需要配置一个名称和密钥。

 

名称:可随意填写,就是我们在调用接口或进行SSO时要传入的client参数。

 

密钥:可随意填写,用于后续加密,最少8位。

 

 

 

此处我们假设名称填写:oa;密钥填写:platform

 

填写完成后确定。

 

 

然后我们就可以使用此鉴权配置来调用接口了。

 

接口调用

 

接口调用的的地址在接口属性栏中有显示:

 

 

当启用鉴权后的接口调用地址为:

 

http://develop.o2oa.net:20030/x_program_center/jaxrs/invoke/{name}/client/{client}/token/{token}/execute

 

请求方法为:POST

 

 

 

地址中的{name}为接口的名称或别名;

 

地址中的{client}为鉴权的名称;

 

地址中的{token}为:用户名#1970年毫秒数 使用鉴权密钥经过3DES加密后的值。

 

 

 

javascript加密代码样例

 

我们使用CryptoJS进行DES加密。(GitHub: https://github.com/brix/crypto-js

 

function crypDES (value, key) {
    var keyHex = CryptoJS.enc.Utf8.parse(key);
    var xtoken = CryptoJS.DES.encrypt(value, keyHex, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    var str = xtoken.ciphertext.toString(CryptoJS.enc.Base64);
    str = str.replace(/=/g, "");
    str = str.replace(/\+/g, "-");
    str = str.replace(/\//g, "_");
    return str;
},

 

IOS加密代码样例

 

/// o2oa DES加密 @param publicKey 加密公钥
func o2DESEncode(code: String, publicKey: String) -> String? {
    if let encode = desEncrypt(code: code, key: publicKey, iv: "12345678", options: (kCCOptionECBMode + kCCOptionPKCS7Padding)) {
        let first = encode.replacingOccurrences(of: "+", with: "-")
        let second = first.replacingOccurrences(of: "/", with: "_")
        let token = second.replacingOccurrences(of: "=", with: "")
        return token
    }else {
        print("加密错误")
        return nil
    }
}
/// DES 加密
func desEncrypt(code: String, key:String, iv:String, options:Int = kCCOptionPKCS7Padding) -> String? {
    if let keyData = key.data(using: String.Encoding.utf8),
        let data = code.data(using: String.Encoding.utf8),
        let cryptData    = NSMutableData(length: Int((data.count)) + kCCBlockSizeDES) {

        let keyLength              = size_t(kCCKeySizeDES)
        let operation: CCOperation = UInt32(kCCEncrypt)
        let algoritm:  CCAlgorithm = UInt32(kCCAlgorithmDES)
        let options:   CCOptions   = UInt32(options)

        var numBytesEncrypted :size_t = 0

        let cryptStatus = CCCrypt(operation,
                                  algoritm,
                                  options,
                                  (keyData as NSData).bytes, keyLength,
                                  iv,
                                  (data as NSData).bytes, data.count,
                                  cryptData.mutableBytes, cryptData.length,
                                  &numBytesEncrypted)

        if UInt32(cryptStatus) == UInt32(kCCSuccess) {
            cryptData.length = Int(numBytesEncrypted)
            let base64cryptString = cryptData.base64EncodedString()
            return base64cryptString
        }
        else {
            return nil
        }
    }
    return nil
}

 

 

 

Android加密代码样例

 

fun o2DESEncode(code: String, publicKey: String): String {
    val sutil = CryptDES.getInstance(publicKey)
    var encode = ""
    try {
        encode = sutil.encryptBase64(code)
        Log.d(LOG_TAG,"加密后code:$encode")
        encode = encode.replace("+", "-")
        encode = encode.replace("/", "_")
        encode = encode.replace("=", "")
        Log.d(LOG_TAG,"替换特殊字符后的code:$encode")
    }catch (e: Exception) {
        Log.e(LOG_TAG,"加密失败", e)
    }
    return encode
}

public class CryptDES {
    private Cipher encryptCipher = null;
    private Cipher decryptCipher = null;
    private static CryptDES des = null;
    public static CryptDES getInstance(String des_key) {
        try {
            DESKeySpec key = new DESKeySpec(des_key.getBytes());
            SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
            des = new CryptDES(keyFactory.generateSecret(key));
        } catch (Exception e) {
            e.printStackTrace();
        }
        return des;
    }
    private CryptDES(SecretKey key) throws Exception {
        encryptCipher = Cipher.getInstance("DES");
        decryptCipher = Cipher.getInstance("DES");
        encryptCipher.init(Cipher.ENCRYPT_MODE, key);
        decryptCipher.init(Cipher.DECRYPT_MODE, key);
    }    
    public String encryptBase64 (String unencryptedString) throws Exception {
        // Encode the string into bytes using utf-8
        byte[] unencryptedByteArray = unencryptedString.getBytes("UTF8");
        // Encrypt
        byte[] encryptedBytes = encryptCipher.doFinal(unencryptedByteArray);
        // Encode bytes to base64 to get a string
        byte [] encodedBytes = Base64.encode(encryptedBytes, Base64.DEFAULT);
        return new String(encodedBytes);
    }
    public String decryptBase64 (String encryptedString) throws Exception {
        // Encode bytes to base64 to get a string
        byte [] decodedBytes = Base64.encode(encryptedString.getBytes(), Base64.DEFAULT);
        // Decrypt
        byte[] unencryptedByteArray = decryptCipher.doFinal(decodedBytes);
        // Decode using utf-8
        return new String(unencryptedByteArray, "UTF8");
    }  
}

 

 

0
0
分享到:
评论

相关推荐

    PHPOA开源协同OA办公系统 v4.0

    PHPOA办公系统是适用于中小型企业的通用型协同OA管理软件,融合了PHPOA长期从事管理软件开发的丰富经验与先进技术,该系统采用领先的B/S(浏览器/服务器)操作方式,使得网络办公不受地域限制PHPOA使用敏捷MVC开发框架...

    SpringBoot JAVA 开源OA协同办公系统

    本项目权限管理可控制页面、接口、数据操作。 目前系统已全面支持国产达梦数据库8.0,人大金仓V8R3,神州通用v7,要需者可加群索取。 安装最新版测试请加群索取或WX联系! 正式版演示地址:http://oa.cyunsoft.com ...

    协同OA办公全功能php源码可二开

    协同协同OA办公全功能php源码可二开,适用于中小型企业的通用型协同OA管理软件,采用全球认可的最为先进的开放理念——OOP(面向对象),进行全新框架设计。框架结构更为清晰, 代码更易于维护。模块化做为功能的...

    PHPOA协同OA办公软件开源版源码 PHPOACollaborationOA.rar

    1、PHPOA办公系统是适用于中小型企业的通用型协同OA管理软件,融合了PHPOA长期从事管理软件开发的丰富经验与先进技术,该系统采用领先的B/S(浏览器/服务器)操作方式,使得网络办公不受地域限制。 2、PHPOA使用敏捷...

    基于PHP Laravel的开源OA/协同办公平台,包含销售管理、日程安排,进销存、数据分析,强大的自定义能力

    Gdoo是基于PHP Laravel的开源OA/协同办公平台,包含销售管理、日程安排,进销存、数据分析,强大的自定义能力。改进销售管理模式,提升企业执行效率。进销存功能、营销管理功能、简单生产计划、业务员销售团队分级...

    基于PHP开发的OA/协同办公平台源码.zip

    一个基于PHP开发、Yii框架、免费开源的,快速、高效的协同办公管理系统 ,从2012年研发以来,是为了简化企业协同应用开发而诞生的。IBOS从诞生以来一直秉承简洁实用的设计原则,在保持出色的功能和的优秀的用户体验...

    开源OA协同办公系统源码,集成Flowable流程引擎 可拖拽创建个性表单

    开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单。基于RuoYi-VUE版本开发。 1、使用RuoYi-Vue的基础上开发。 2、集成flowable,并与系统用户角色进行绑定,可非常方便的设置任务的办理人与办理角色...

    基于Yii和Bootstrap的开源OA协同办公平台设计源码

    支持全平台覆盖的酷办公客户端,包括Windows、iOS、Android、Mac和Linux等,为用户提供一个高效、易用的协同办公解决方案,同时支持企业管理二次开发,作为国内首家开源OA平台,不仅具备出色的颜值,还具有强大的...

    苦菊OA协同OA办公系统V2019(价值10万元的OA源码)

    苦菊OA办公系统是适用于中小型企业的通用型协同OA管理软件,融合了苦菊OA长期从事管理软件开发的丰富经验与先进技术,该系统采用领先的B/S(浏览器/服务器)操作方式,使得网络办公不受地域限制。 苦菊OA使用敏捷MVC...

    51CTO下载-基于Activiti5工作流实战企业协同OA办公系统教程

    《基于Activiti5工作流实战企业协同OA办公系统教程》是一门深度解析如何利用Activiti5框架构建高效、协同的企业办公自动化(OA)系统的专业课程。该教程旨在帮助IT从业者和对企业信息化有兴趣的学习者掌握工作流引擎...

    activiti入门教程-基于Activiti5工作流实战企业协同OA办公系统.pdf

    标题中提到的“Activiti入门教程-基于Activiti5工作流实战企业协同OA办公系统.pdf”意味着本教程是针对Activiti 5版本,专门介绍如何使用Activiti框架来构建一个实战的企业协同办公系统(OA)。Activiti 5版本是该...

    基于RuoYi-VUE版本开发开源OA协同办公系统源码 集成Flowable流程引擎 可自由选择提交的流程.zip

    总的来说,基于RuoYi-VUE和Flowable的开源OA协同办公系统,不仅为企业提供了强大的流程管理工具,也为开发者提供了宝贵的实践平台,让他们能够深入理解前后端分离架构、工作流引擎的应用以及企业级系统的设计与实现...

    天生创想OA办公系统V2019开源版含CRM、项目管理、移动H5

    天生创想OA办公系统是一款基于PHP开发的开源企业级协同办公解决方案,V2019开源版更是集成了CRM(客户关系管理)、项目管理和移动H5功能,为企业提供了全面、灵活且高效的信息化管理工具。 首先,让我们深入了解OA...

    PHP信呼协同办公OA系统 v2.5.0

    信呼协同办公OA系统是开源的一款办公系统,跨平台的系统,支持APP,pc网页版,pc客户端等。 信呼协同办公OA系统特点: 1、让每个企业单位都有自己的工作系统。 2、移动,免费开源工作系统,数据全部自己管理。 3、...

    【信呼协同办公OA系统+v2.2.0】免费开源跨平台办公系统+支持APPpc网页版pc客户端.zip

    信呼协同办公OA系统特点: 1、让每个企业单位都有自己的工作系统。 2、移动,免费开源工作系统,数据全部自己管理。 3、自定义管理应用,模块数据,权限分配。 4、单据快速提醒推送,重要通知任务及时提醒。 5、即时...

    o2oa用户操作手册-环境部署及搭建应用.zip

    4. **接口集成**:O2OA提供API接口,可以与其他系统进行数据交互和功能集成。 5. **报表分析**:利用O2OA的数据分析功能,生成各类报表,辅助决策。 在文档中,"2332036.doc"可能是关于具体步骤的详细说明,包括...

    开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单

    开源OA协同办公系统,集成Flowable流程引擎 可拖拽创建个性表单。基于RuoYi-VUE版本开发。 1、使用RuoYi-Vue的基础上开发。 2、集成flowable,并与系统用户角色进行绑定,可非常方便的设置任务的办理人与办理角色...

    基于PHP的小微开源PHPOA办公系统源码.zip

    "基于PHP的小微开源PHPOA办公系统"是一个专为小微企业设计的开源办公自动化解决方案,旨在帮助这些企业实现内部协同工作、流程审批、文档管理等功能。PHP作为广泛应用的服务器端脚本语言,因其开源、免费、跨平台、...

    【信呼协同办公OA系统 v2.2.0】免费开源跨平台办公系统+支持APP/pc网页版/pc客户端

    信呼协同办公OA系统是开源的一款办公系统,跨平台的系统,支持APP,pc网页版,pc客户端等。 信呼协同办公OA系统特点: 1、让每个企业单位都有自己的工作系统。 2、移动,免费开源工作系统,数据全部自己管理。 3、...

    开源OA免费办公系统

    开源OA免费办公系统是一款专为企事业单位打造的高效协同办公平台,其核心价值在于提供一套无需付费即可使用的软件解决方案,极大地降低了企业的运营成本。这款办公系统以源码形式开放,意味着用户可以根据自身需求...

Global site tag (gtag.js) - Google Analytics