# SDK集成方案
应用远程调用模式,即集成SDK,应用集成SDK实际是发送rest请求远程调用AFCenter。
注:应用集成SDK前提是该应用项目为EOS项目且版本为8.1.2版本(包含)以上。
- 开发依赖包
<dependency>
<groupId>com.primeton.gocom</groupId>
<artifactId>com.primeton.gocom.afcenter.sdk</artifactId>
<version>8.2.1</version>
</dependency>
配置详情
网关集成AFCenter的SDK共有两种模式:
1.直接在项目配置文件中使用ip加端口模式完成AFCenter的SDK接口调用,如下所示:
afc.application.name=127.0.0.1:8081
afc.application.tenant=sys_tenant
afc.application.appCode=AFCenter
afc.application.appSecret=b771a0ad37c34baeab2b6f73fbebcabd
tenant为系统默认租户,appCode为系统初始化应用编码,appSecret为改应用密匙,都可使用admin账号登录AFCenter平台后获取。
- 在项目配置文件中使用nacos服务名模式完成AFCenter的SDK接口调用,如下所示:
afc.application.name=AFCENTER
afc.application.tenant=sys_tenant
afc.application.appCode=AFCenter
afc.application.appSecret=b771a0ad37c34baeab2b6f73fbebcabd
afc.application.name
的值为AFCenter服务启动后在nacos中注册的服务名。
注:使用nacos服务名模式集成AFCenter的SDK需要与AFCenter配置同一nacos地址。
接口说明
com.primeton.gocom.afcenter.sdk.api包中接口即可。
使用方式
直接使用@Autowired
方式注入IAFCClient,再get相应API类后再调用对应的API方法。
也可以使用AFCClientFactory去获取IAFCClient
IAFCClient afcClient=AFCClientFactory.getInstance().createAFCClient();
@RestController
public class TestController {
@Autowired
private IAFCClient afcClient;
@GetMapping(value = "/api/user")
public User getAfcApiUser() {
IUserAPI userApi = afcClient.getUserAPI();
User user = userApi.findUserByCode("sysadmin");
return user;
}
}
# 常见问题
应用集成AFCenter的SDK的过程中容易出现的问题:
1.AFCenter的SDK版本依赖问题:
目前版本已更新为8.2.1-SNAPSHOT
,后续版本变更文档中会及时更新。
2.应用项目集成SDK后,调用SDK接口出现401
状态码,AFCenter日志打印提示访问该接口前未登录问题:
首先确保AFCenter平台用户账号已登录,通过postman调用应用的接口(headers中传入Authorization,Authorization值是在afc登陆接口返回值中获取的)。
其次遇到session共享的问题,请排查以下几点:
a. 应用与AFCenter是否属于同系统。
b. redis是否使用同一个。
c. user-config.xml中是否开启系统内共享开关。
<group name="CacheForUserObject">
<configValue key="IsSystemCache">true</configValue>
<configValue key="CacheMode">REPL_ASYNC</configValue>
<configValue key="IsSystemShare">true</configValue>
</group>
d. 是否加入登录接口过滤白名单
注:afcenter的user-config.xml文件中登录过滤白名单要加入/api/afc/afc-proxy/*;
<group name="Login-Filter">
<!-- pages that can be accessed by any one including those not login -->
<configValue
key="Exclude">/api/afc/afc-proxy/*,/api/afc/oauth2/*,/api/afc/login/third-party/auth,/api/afc/login/third-party/qrConnect,/afc-proxy/*,/api/afc/validation-code,/swagger-ui.html,/v2/api-docs,/webjars/*,/swagger-resources/*,/afc,/afc/,/api/afc/login,/api/afc/login/password/key,/actuator/*,/om/*,/common.remote,
/jmxDefault.jmx,/common.download</configValue>
<!-- <configValue key="Include">*.flow,*.flowx,*.jsp,*.html,*.ajax,*.ext,*.action,*.beanx</configValue> -->
<configValue key="Include">/*</configValue>
<!-- the page to display when user not login -->
<configValue key="LoginPage"></configValue>
</group>