通过Rest模板捕获LOGIN COOKIE

时间:2016-05-11 09:10:53

标签: java spring spring-mvc cookies

我有以下代码,用于对Tableau系统的RestAPI进行POST调用,该代码正在工作并查看响应输出。

但是,我想从这个输出中捕获cookie,需要用于进一步消费!有人可以帮我解决这个问题吗?

代码:

package com.abc.it.automation.service;

import java.io.FileInputStream;
import java.io.IOException;
import java.net.CookieStore;
import java.net.HttpCookie;
import java.net.URI;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.Properties;

import org.springframework.http.HttpHeaders;
import org.springframework.http.RequestEntity.HeadersBuilder;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.ResponseExtractor;
import org.springframework.web.client.RestTemplate;

import com.abc.it.automation.utils.SSLUtil;

public class BIaaSTableauService {



    private static Properties tableau_properties = new Properties();

    static {

        // Loads the values from configuration file into the Properties instance
        try {
            tableau_properties.load(new FileInputStream("res/config.properties"));
        } catch (IOException e) {
            System.out.println(e);
        }
    }

    private static final String loginURL = tableau_properties.getProperty("server.host");
    private static final String siteSearchURL = tableau_properties.getProperty("site.search.url");



    public static void main(String[] args) throws KeyManagementException, NoSuchAlgorithmException {

        RestTemplate restTableau = new RestTemplate();

        String requestLogin =   "<tsRequest>"+
                            "<credentials name=\"svc_tableau\" password=\"xxxxxxxxx\" >"+
                            "<site contentUrl=\"\"/>"+
                            "</credentials>"+
                            "</tsRequest>";
        SSLUtil.turnOffSslChecking();
        ResponseEntity<String> responseLogin = restTableau.postForEntity(loginURL, requestLogin, String.class);
        System.out.println(responseLogin.getBody());

1 个答案:

答案 0 :(得分:0)

您需要按如下方式构建RestTemplate。

RestTemplate restTableau = new RestTemplate(new MyClientHttpRequestFactory());

按如下方式扩展ClientHttpRequestFactory。

public class MyClientHttpRequestFactory extends SimpleClientHttpRequestFactory {


private Cookie cookie;
//setters and getters.

@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) {
 this.setCookie(connection.getRequestProperty("Cookie"));

}
}