Обходной путь для # request.getParameters () в Thymeleaf - PullRequest
0 голосов
/ 01 октября 2018

Мы используем CAS 5.2.3, который использует обновленную версию Thymeleaf.Thymeleaf имеет ограниченный доступ к определенным функциям запроса - '# request.getParameters ()'.Есть ли работа вокруг этого?Я получаю следующую ошибку при попытке получить к нему доступ: «В этом контексте запрещен доступ к параметрам запроса. Обратите внимание, что к переменному доступу применяются некоторые ограничения. Например, прямой доступ к параметрам запроса запрещен в выражениях предварительной обработки и неэкранированных данных в шаблоне TEXT.режим, в спецификациях вставки фрагментов и в некоторых специфических процессорах атрибутов. "

1 Ответ

0 голосов
/ 03 октября 2018

Хороший вопрос.Я столкнулся с этой проблемой несколько месяцев назад, она разрешима.

Просматривая их исходный код, я обнаружил, что они ограничивают использование #request.getParameters() только для определенного тега, они не запрещали использовать#request.getParameters() в некоторых ситуациях.

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


В любом случае, в приведенном ниже примере требуется перенаправить пользователя на другую страницу, основываясь на параметре url

Вот пример кода, который был нарушен в CAS 5.2.x, но работал в CAS 5.1.x:

<html>
<head>
<title> Deforestation </title>
</head>
<body th:attr="onload='window.location.href=\''+${#request.getParameter('url')}+'\''">
</body>
</html>

Вот обходной путькод:

<html>
<head>
<title> Deforestation </title>
</head>
<body>

Logging out. Please wait...

<script th:inline="javascript">
/*<![CDATA[*/
    location.href = /*[[( ${#request.getParameter('url')} )]]*/ ;
/*]]>*/
</script>
</body>
</html>

Если это не помогло решить проблему, предоставьте исходный код, чтобы мы могли лучше рассмотреть проблему.


Примечание.Есть причина безопасности, почему этот материал теперь запрещен, использование этого обходного пути может поставить под угрозу стандарт безопасности, не забудьте санировать ввод пользователя, если необходимо


Редактировать:

согласно комментарию, хотя и не элегантно, может быть, что-то вроде следующего будет работать?

<html>
<head>
<title> Data attribute </title>
</head>
<body>

<span id="foobarid"> </span>

<script th:inline="javascript">
/*<![CDATA[*/
    $('#foobarid').data('foo-bar',/*[[( ${#request.getParameter('foo') == 'bar'} )]]*/); 
/*]]>*/
</script>
</body>
</html>
...