with headers example auth java spring cookies resttemplate

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());