2014-12-11 3 views
0

Я пытаюсь установить несколько файлов cookie в ответ на http-входящий шлюз весной интеграции ... когда я пытаюсь установить несколько заголовков «Set-Cookie» с обогатителем, только последний файл cookie возвращает его обратно браузер. Что мне не хватает? неКак установить несколько файлов cookie для интеграции с http-inbound-gate для интеграции с Spring?

<int:header-enricher>  
    <int:header name="Set-Cookie" value="cookie1=abc" overwrite="false" /> 
    <int:header name="Set-Cookie" value="cookie2=xyz" overwrite="false" /> 
<int:header-enricher/> 

ответ

1

Согласно RFC6265 этот заголовок должен быть в формате:

Set-Cookie: <Name> = <Value> [ ; expires = <Date>] [ ; path = <Path> ] [ ; domain = <Domain> ] 

Таким образом, там не останавливается, чтобы сделать это в <header-enricher>, но только в пределах одной записи.

Поскольку Spring Integration ничего не знает о характере точки с запятой Set-Cookie, он не может объединить несколько деклараций для одного заголовка для одной записи. Итак, побеждает последний.

То же правило для любого заголовка.

UPDATE

Кстати, мы можем сделать это уже сейчас.

org.springframework.http.HttpHeaders является MultiValueMap<String, String>, поэтому мы можем add несколько значений одного и того же заголовка HTTP, и они будут заполнены должным образом к HttpServletResponse.

Весна Интеграция DefaultHttpHeaderMapper может получить дело с Itarable значениями от MessageHeaders. Итак, мы можем просто заполнить заголовок Set-Cookie (заголовок SI), так как List<String> избегать этой точки с запятой хардкор.

Существует два способа сделать это с помощью <header-enricher>: метод POJO вызова или <script>:

<int:header-enricher> 
    <int:header name="Set-Cookie"> 
     <int-groovy:script> 
      ['cookie1=abc', 'cookie2=xyz'] 
     </int-groovy:script> 
    </int:header> 
</int:header-enricher> 
+0

Спасибо, я понимаю, это гораздо лучше. – user366735