java - headers - spring security authentication
ConfiguraciĆ³n de cookies de seguridad con RestTemplate (3)
Puede acceder al HttpURLConnection
subyacente utilizado por RestTemplate
RestTemplate
su RestTemplate
con una ClientHttpRequestFactory
personalizada, que le permite acceder a la conexión subyacente para establecer encabezados, propiedades, etc. El ClientHttpRequestFactory
es utilizado por RestTemplate
al crear nuevas conexiones.
En particular, puede extender la implementación de prepareConnection()
y anular el método prepareConnection()
:
public class YourClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
@Override
protected void prepareConnection(HttpURLConnection connection, String httpMethod) {
connection.setRequestProperty("SecurityCookie", ssocookie.getValue());
}
}
Intento llamar a un servicio Restful JSON utilizando RestTemplate y el convertidor Jackson json. Ahora, para llamar al servicio, necesito pasar una cookie de seguridad. Puedo lograr esto usando URLConnection (Vea el código a continuación)
URL url= new URL("https://XXXXXXXX");
URLConnection yc = url.openConnection();
yc.setRequestProperty("SecurityCookie", ssocookie.getValue());</code>
¿Cuál es el paralelo para esto en RestTemplate? Aquí hay un fragmento de código que he estado usando para llamar a un servicio tranquilo usando RestTemplate:
RestTemplate rest = new RestTemplate();
InputBean input = new InputBean();
input.setResource("SampleResource");
HttpEntity<InputBean > entity = new HttpEntity<InputBean>(input);
ResponseEntity<OutputBean> response1 = rest.postForEntity(
"https://XXXXXXXXX",
entity, OutputBean.class);</code>
No puedo averiguar cómo pasar la cookie de seguridad mientras uso RestTemplate para llamar al servicio. Cualquier ayuda con esto sería genial.
Escribí una publicación de blog que explica cómo hacer esto usando encabezados de solicitud:
http://springinpractice.com/2012/04/08/sending-cookies-with-resttemplate/
Aquí está el código:
HttpHeaders requestHeaders = new HttpHeaders();
requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue());
HttpEntity requestEntity = new HttpEntity(null, requestHeaders);
ResponseEntity rssResponse = restTemplate.exchange(
"https://jira.example.com/sr/jira.issueviews:searchrequest-xml/18107/SearchRequest-18107.xml?tempMax=1000",
HttpMethod.GET,
requestEntity,
Rss.class);
Rss rss = rssResponse.getBody();
Así es como nos ha funcionado
requestHeaders.add("Cookie", "JSESSIONID=" + session.getValue());