无法访问Camunda中的REST API

时间:2017-10-26 19:31:15

标签: rest session-cookies bpmn jsessionid camunda

在我们的项目中,我们正在尝试使用camunda BPMN。使用camunda独立发行版并在Tomcat中部署和运行。

以管理员用户身份登录并能够访问cockpit和任务列表。但是,当我们尝试使用Java客户端访问API时。我们收到了未经授权的(401)错误。虽然我们将JSESSIONID作为“Cookie”发送

尝试了DefaultHttpClient和HttpURLConnection - 它没有用完

注意:通过使用管理员用户名和密码调用登录api来检索JSESSIONID。

帮我解决问题

下面附有java客户端代码

public static void main(String[] args) {
    CamundaBMPNClient bpmnClient = new CamundaBMPNClient();
    Map<Integer, String> cookieHeader = bpmnClient.getCookieHeader();
    bpmnClient.getListofTasks(cookieHeader);
}

public Map<Integer, String> getCookieHeader() {
    String jSessionID = null;
    Map<Integer, String> headerValues = new HashMap<Integer, String>();
    HttpClient httpClient = HttpClientBuilder.create().build();
    HttpPost request = new HttpPost(
            "http://localhost:8090/camunda-webapp-tomcat-standalone-7.2.0/"
                    + "api/admin/auth/user/default/login/cockpit");
    request.addHeader("content-type", "application/x-www-form-urlencoded");
    request.addHeader("Accept", "application/json");
    String jsonString = new Gson()
            .toJson("username=admin&password=admin@123");
    StringEntity params;
    try {
        params = new StringEntity(jsonString);
        request.setEntity(params);
        HttpResponse response = httpClient.execute(request);
        Header[] cookieheader = response.getHeaders("Set-Cookie");

        for (Header s : cookieheader) {
            // Do your stuff here
            System.out.println(s.getValue());
            String[] str = s.getValue().split(";");
            int i = 1;
            for (String s1 : str) {
                headerValues.put(i, s1.trim());
                i++;
            }
        }
        System.out.println("jSessionID::" + jSessionID);
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return headerValues;
}

public void getListofTasks(Map<Integer, String> cookieHeader) {
    int id = 0;
    // DefaultHttpClient httpclient = new DefaultHttpClient();

    HttpPost request = new HttpPost(
            "http://localhost:8090/camunda-webapp-tomcat-standalone-7.2.0/api/engine/engine/default/task");
    request.addHeader("Content-type", "application/json");

    String[] arrJSessionID = cookieHeader.get(1).split("=");

    System.out.println("" + arrJSessionID[1]);

    CookieStore cookieStore = new BasicCookieStore();
    BasicClientCookie cookie = new BasicClientCookie("JSESSIONID=",
            arrJSessionID[1]);
    cookie.setDomain("http://localhost:8090");
    cookie.setPath("/camunda-webapp-tomcat-standalone-7.2.0/");
    // cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "true");
    cookieStore.addCookie(cookie);
    // httpclient.setCookieStore(cookieStore);

    HttpClient httpclient = HttpClientBuilder.create()
            .setDefaultCookieStore(cookieStore).build();

    String jsonString = new Gson().toJson("{}");
    StringEntity jsonStr;
    try {
        jsonStr = new StringEntity(jsonString);
        request.setEntity(jsonStr);
        HttpResponse response = httpclient.execute(request);
        int statusCode = response.getStatusLine().getStatusCode();
        Header[] header = response.getHeaders("Set-Cookie");

        for (Header h : header) {
            System.out.println(h.getValue());
        }
        System.out.println("statusCode::" + statusCode);
    } catch (Exception e) {
        e.printStackTrace();
    }

}

0 个答案:

没有答案