Возможно ли разделить обычные и обратные URL-обращения в grails?

#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; простое объединение элементов не работает.