Скрыть URL в приложении Grails - PullRequest
2 голосов
/ 30 мая 2011

Есть ли способ скрыть URL в адресной строке с помощью приложения Grails.Теперь пользователи веб-приложения могут видеть и изменять значения параметров запроса из адресной строки и видеть идентификатор записи на странице показа.

Есть ли способ в Javascript или Groovy (URL Mapping) или Grails (.gsp) или HTML или Tomcat (server.xml или conf.xml или в web.xml внутри приложения в веб-приложениях)

ex (http://www.example.com/hide/show /) я хочу избежать этого URL и всегда видеть (http://www.example.com) или (http://www.example.com/hide/show) без идентификатора записи

Есть ли способ предотвратить это?

Ответы [ 4 ]

1 голос
/ 30 мая 2011

Нет, большинство браузеров не позволяют скрыть адресное поле, даже если вы открываете новое окно, используя window.open.Это функция безопасности, поэтому один сайт не может легко выдавать себя за другой.

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

0 голосов
/ 31 мая 2011

Не совсем уверен, что вы имеете в виду, но я бы изменил отображение корневого URL по умолчанию в UrlMappings.groovy, чтобы оно выглядело примерно так:

    static mappings = {

    "/$controller/$action?/$id?"{
        constraints {
            // apply constraints here
        }
    }
    //Change it here!!!!
    "/"(controller: 'controllerName', action: 'actionName')

Где 'actionName' и 'controllerName' - это то, чтоВы хотите, чтобы они были - 'hide', 'show' в вашем примере?

Чем передать все параметры по почте вместо get, просто измените метод <g:form>.

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

Спасибо,

Джим.

0 голосов
/ 30 мая 2011

Вероятно, вы можете справиться с этим, используя вариант Post / Redirect / Get:

http://en.wikipedia.org/wiki/Post/Redirect/Get

На нашем сайте Grails у нас много полей поиска.Когда пользователь щелкает по ссылке на страницы, все эти поля поиска оказываются в URL, который создает уродливые URL: с более высоким риском того, что пользователи добавят в закладки эти адреса, что может означать будущие проблемы.

Мы решили это, сохранив не тольковсе POST, но также и GET с параметрами в сеансе, перенаправьте на GET без параметров и добавьте их снова в контроллер.Это не только создает красивые URL-адреса, но также и память, так что если пользователь возвращается к более раннему меню, то выбранные детали в этом меню отображаются повторно.

Для вашего конкретного запроса скрыть идентификатор в «show»/ 42 «Вы, вероятно, можете обработать это аналогичным образом или сконфигурировать Grails для использования« show? Id = 42 »вместо этого, но у нас нет этого требования, поэтому я не стал вдаваться в подробности.Удачи!

Забыл упомянуть: это не увеличит безопасность, поскольку ссылки будут по-прежнему содержать идентификаторы, это только очистит адресную строку.

Вот пример кода, который должен работать,Если вызывается show? Id = 42, он сохраняет id = 42 в сеансе, затем перенаправляет на просто show, а id = 42 добавляется в параметры перед дальнейшей обработкой.Он делает то, что вы хотите, но, как прокомментировано, это не всегда может быть разумно.

def show = {
  if (request.method == 'GET' && !request.queryString) {
    if (session[controllerName]) {
      params.putAll(session[controllerName])
      // Add the typical code for show here...
     }
  } else {
    session[controllerName] = extractParams(params)
    redirect(action: 'show')
    return
  }
0 голосов
/ 30 мая 2011

Это часть шаблона URL restful , реализованного Grails.

Лучший способ скрыть URL-адрес - использовать iframe на странице, которую пользователь должен видеть в своей адресной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...