#grails #url-mapping
#grails #сопоставление url
Вопрос:
У меня проблема. Для многих существующих ссылок я бы хотел добавить соленый хэш по соображениям безопасности. Я не хочу искать и изменять все существующие ссылки. На самом деле, я бы хотел решить это только в UrlMappings.
Вот кое-что, что работает для сопоставления входящих запросов:
"/foo/$key/$hash" {
controller = "foo"
action = "bar"
}
Вот что работает для обратного сопоставления (createLink):
"/foo/$key/${DigestUtils.shaHex("$salt$key")}" {
controller = "foo"
action = "bar"
}
Чего я, похоже, не могу понять, так это как объединить эти два в одно или как заставить одно обрабатывать входящие запросы, а другое — ссылки на создание.
Есть идеи?
Ответ №1:
Один из способов сделать это — создать пользовательский тег (в TagLib ), который добавит значения хэша и обернет вокруг createLink.
Итак, в основном
createHashLink = { attrs ->
def hash = "${DigestUtils.shaHex("$salt$key")}"
out << createLink( mapping: 'blah', params: [ hash: hash ] ) ...
}
Затем в вашем коде вы можете просто вызвать g.createHashLink( … ), который будет работать так же, как createLink.
Комментарии:
1. Я знаю, что это сработало бы, но я надеялся сделать это непосредственно из UrlMappings. Части этого работают в UrlMappings; простое объединение элементов не работает.