null

Решение проблем с CSRF для Liferay forms

Недавно в процессе работы над порталом на базе Liferay столкнулись с проблемой отправки форм. Когда пользователь пытался отправить форму с вопросом, он получал сообщение о том, что срок действия его сессии истек:

Посмотрев в "инструменты разработчика", застали следующую картину:

Ее сопроводил ответ {"validCSRFToken":false}. Для решения этой проблемы одним из вариантов может быть отключение проверки CSRF конкретно для лайфреевских форм. Однако проблема в том, что в файле portal-ext.properties, где хранятся основные настройки портала, есть несколько свойств, отвечающих за игнорирование CSRF, например:

auth.token.ignore.origins

auth.token.ignore.actions

auth.token.ignore.portlets

За проверку CSRF в формах отвечает же действие (action):

com.liferay.dynamic.data.mapping.form.web.internal.portlet.action.ValidateCSRFTokenMVCResourceCommand

Несмотря на наличие свойства, отвечающего непосредственного за действия, оно нам не помогло. Пришлось добавлять действие напрямую в  auth.token.ignore.origins, после чего все заработало. Таким образом, в portal-ext.properties было добавлено:

auth.token.ignore.origins=com.liferay.dynamic.data.mapping.form.web.internal.portlet.action.ValidateCSRFTokenMVCResourceCommand

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

Коротко о себе:

 

Работаю Java\Kotlin Backend Developer в компании Tune-it. На работе занимаюсь проектами, связанными с Liferay, NiFi, Spring Framework, а вне работы - философской антропологией