第三方调用匿名请求获取任务
分配给匿名用户角色的 API 不需要登录就可以访问,其它 API 需要登录后才能访问
系统提供使用用户名就能登录的 API,参考《登录平台》中的使用 token 登录,注意不要滥用
在一个匿名访问的请求中,实现登录,然后调用获取任务 API,即可实现匿名请求获取任务,步骤如下
- 添加服务请求,分配给匿名用户角色
- 在服务请求中,使用用户名登录,用户名可以是传入的参数,也可以使用一个固定的用户名
- 登录后获取到 user_session 放到 Cookie 中,在调用获取任务的 API 时作为请求头
- 获取任务调用的是工作流提供的 /wf/biz/task/queryByOrg,API 的具体说明参考《任务 API》
匿名请求的示例代码如下:
public String thirdGetTask(String username) throws Exception {
String credentialToken = ContextUtil.getEnv("CREDENTIAL_TOKEN");
String token = ServiceUtil.post(SpringWebUtil.getRequest(), "entry", "/uaa/sso/token?username=1001&credentialToken=" + credentialToken, null, String.class);
String session = AuthUtil.tokenLogin(ServiceUtil.getServiceUrl("entry"), token);//调用登录返回的 user_session 的值
String user_session = "";
if (StringUtils.isNotEmpty(session)) {
user_session = "user_session=" + session;
} else {
throw new BaseRuntimeException("001", HttpStatus.UNAUTHORIZED.value(), "用户1001登录失败", null);
}
HttpServletRequest request = SpringWebUtil.getRequest();
Map<String, String> headers = ServiceUtil.getExtHeaders(request);
headers.put("Cookie",user_session);
String serviceUrl = "http://"+RequestUtil.getServiceGatewayHostname()+"/wf/biz/task/queryByOrg";//http 请求的具体服务的 url
//通过参数设置查询某人最近20条待办任务
Map<String, String> params = new HashMap();
params.put("distinct", "true");
params.put("limit","20");
params.put("orderBy","sCreateTime DESC");
params.put("status","waiting");
params.put("org",username);
JSONArray array = ServiceUtil.get(serviceUrl, params, headers, JSONArray.class);//返回的是 json 数组
return array.toString();
}
请求所在的应用发布后,打开“企业门户-系统管理-权限管理-应用资源管理”,把请求分给匿名用户角色
如请求的访问路径是 /main/fuwu/thirdgettask,就可以直接用“门户域名/应用服务名/main/fuwu/thirdgettask?username=”获取任务数据