2015-07-20 3 views
0

Я реализовал услугу REST с использованием Spring веб-службы, с безопасностью CSRF включена в весенне-security.xml, как показано нижеCSRF токен в Master/Slave среда

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:security="http://www.springframework.org/schema/security" 
     xsi:schemaLocation="http://www.springframework.org/schema/security 
          http://www.springframework.org/schema/security/spring-security-3.2.xsd 
          http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans-4.1.xsd"> 
    <security:http> 
     <security:csrf/> 
    </security:http> 
</beans> 

Это приложение развертывается на двух котом 7.0 серверов в настройке ведущего/ведомого, причем apache используется как балансировщик нагрузки.

Некоторые запросы отклоняются сервером, вызывая исключение безопасности, в котором токен CSRF недопустим.

Я думаю, что запрос с действительным токеном CSRF для главного сервера перенаправляется на подчиненный, и наоборот, что вызывает исключение. Можете ли вы настроить безопасность так, чтобы действительный токен для любого сервера был принят другим?

ответ

0

По умолчанию токен CSRF хранится внутри HttpSession.

Это означает, что вам необходимо переделать HttpSession. Один простой способ сделать это - использовать Spring Session.

Другой вопрос, который вы можете задать себе: «Используете ли вы услугу отдыха из веб-браузера?» Если нет, вы можете удалить CSRF-защиту.

+0

Спасибо за предложение, проблема была на самом деле с балансировщиком нагрузки. Мы изменили конфигурацию так, чтобы пользовательский сеанс привязывался к одному серверу, и это решило проблему –

Смежные вопросы