项目背景
某系统单点登录需要http接口和C接口混合完成
接口流程如下:
1、获取应用令牌
2、获取认证信息接口(C接口)
3、数据释放接口(C接口)
4、获取用户信息
Java调用C接口实现:
通过分析,JAVA中可以使用jna方法实现C接口调用
导入jna的库
此处选择要导入的jna库的jar包
导入C接口生成的dll库文件
Jna调用C接口具体方法实现
package com.westone.utils;
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.PointerByReference;
@SuppressWarnings("unused")
public interface CDLL extends Library{
//加载dll库
public String dllname = "./lib/WstAuthClientSdk.dll";
CDLL INSTANCE = (CDLL) Native.loadLibrary(dllname, CDLL.class);
//实现dll库中接口方法
int WstAuthClientSdk(String pAuthParams, PointerByReference ppAuthResult);
int WstAuthClientSdkFree(Pointer ptr);
//获取字符串中指定位置的子字符串
public static String getValueFromKey(String strJson, String key){
if(!strJson.contains(key)) return null;
int index = strJson.indexOf(key);
int start = index + key.length()+3;
int end = strJson.length()-3;
String value = strJson.substring(start, end);
return value;
}
}
将方法实现导出jar包
Jmeter中调用
将jna的包放在jmeter的lib/ext库中,此库中的文件jmeter每次启动都会自动加载
将dll文件放在jmeter的bin目录下,路径同java方法实现中的路径
Jmeter的计划中加载java方法的jar包
Jmeter中实现java方法的调用
http请求中使用调用java方法获取的参数值
过程中遇到的问题总结
注意C接口实现的环境要求,此次实现使用的32位jdk,因此需要将所有工具都安装为jdk 32位适应的版本
Dll库放置的位置需跟java方法中保持一致,不然jmeter调用时会找不到对应的库文件
如何查看dll文件时64位还是32位
直接用记事本或者notepad++打开dll文件,很多乱码,不要头疼,在第二段中找到PE两个字母,在其后不远处会出现d or L,如是d,则证明该程序是64位,若是L,则证明该程序是32位
本文暂时没有评论,来添加一个吧(●'◡'●)