Сравните строку с тегом Spring Security с помощью Freemarker - PullRequest
0 голосов
/ 17 мая 2019

Как мне добиться следующих результатов с помощью тегов-меток Freemarker и Spring Security?

<#if "[]" == <@security.authentication property='principal.userAccount.administratedVendors'/> >
    <a href="/my-accounts">My Accounts</a>
</#if>

В настоящее время вышеприведенное не компилируется.

1 Ответ

0 голосов
/ 19 мая 2019

Корень проблемы в том, что security.authentication должна быть не директивой FreeMarker, а функцией или методом FreeMarker. Директивы не имеют возвращаемого значения (поэтому вы не можете использовать их вместо выражения, как вы это сделали). Директивы могут выводить на печать (помимо прочего), но это всего лишь «побочный эффект», а не возвращаемое значение. Функции / методы FreeMarker имеют возвращаемое значение. Но если интеграция Spring не обеспечивает тот же вызов, что и функция / метод (проверьте это), то лучшее, что вы можете сделать, это уродливый обходной путь:

<#assign capturedOutput><@security.authentication property='principal.userAccount.administratedVendors'/></#assign>
<#if capturedOutput == '[]'>
  <a href="/my-accounts">My Accounts</a>
</#if>

В теории это немного хрупко, поскольку (я думаю) principal.userAccount просто печатает toString() объекта значения свойства. В то время как для большинства List реализаций, которые возвращают "[]" для пустого списка, это не гарантируется Java API.

...