¿Hay alguna manera de ocultar la url en la barra de direcciones con la aplicación Grails? Ahora los usuarios de la aplicación web pueden ver y cambiar los valores de los parámetros de solicitud desde la barra de direcciones y ven la identificación del registro en la página de presentación.

¿Hay alguna manera en Javascript o Groovy (mapeo de URL) o Grails (.gsp) o HTML o Tomcat (server.xml o conf.xml o en web.xml dentro de la aplicación en las aplicaciones web)

Ej. (http://www.example.com/hide/show /) quiero evitar esta url y siempre veo (http://www.example.com) o (http://www.example.com/hide / show) sin la identificación del registro

¿Hay alguna manera de prevenir esto?

2
user597987 30 may. 2011 a las 09:13

4 respuestas

La mejor respuesta

No, la mayoría de los navegadores no le permiten ocultar el campo de dirección, incluso si abre una nueva ventana con window.open. Esta es una característica de seguridad, por lo que un sitio no puede pretender fácilmente ser otro.

Su aplicación debe tener controles de seguridad para que un usuario no pueda acceder a datos que solo otro usuario debería ver. Solo ocultar la URL no sería seguro de todos modos, puede evitarlo fácilmente utilizando herramientas integradas en el navegador o complementos fácilmente disponibles.

1
Guffa 30 may. 2011 a las 05:32

No estoy muy seguro de lo que quieres decir, pero cambiaría la asignación predeterminada de URL raíz en UrlMappings.groovy para que se vea un poco así:

    static mappings = {

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

¿Dónde 'actionName' y 'controllerName' son lo que quieres que sean: 'hide', 'show' en tu ejemplo?

Luego, pase todos los parámetros a través de una publicación en lugar de un get, simplemente cambie el método <g:form>.

Obviamente, todavía tendrá que implementar cualquier verificación de seguridad requerida en el controlador como lo indican otros carteles.

Gracias

Jim

0
lo_toad 31 may. 2011 a las 10:05

Es parte del patrón de URL de descanso implementado por griales.

Su mejor opción para ocultar la URL sería usar un iframe dentro de la página que desea que el usuario vea en su barra de direcciones.

0
jamesallman 30 may. 2011 a las 05:40

Probablemente pueda manejar esto usando una variación de Post / Redirect / Get:

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

En nuestro sitio Grails tenemos muchos campos de búsqueda. Cuando un usuario hizo clic en un enlace de paginación, todos esos campos de búsqueda terminaron en la URL que creó las URL feas, con un mayor riesgo de que los usuarios marcaran esas direcciones como marcadores que podrían significar problemas futuros.

Resolvimos esto guardando no solo todos los POST sino también GET con parámetros en la sesión, redirigir a GET sin parámetros y agregarlos nuevamente en el controlador. Esto no solo crea URL agradables, sino también una memoria, de modo que si un usuario vuelve a un menú anterior, se vuelven a mostrar los detalles seleccionados dentro de ese menú.

Para su solicitud específica de ocultar el ID en "show / 42", probablemente pueda manejarlo de la misma manera o posiblemente configurar Grails para usar "show? Id = 42", pero no tenemos ese requisito, así que no he buscado más en ese tema. ¡Buena suerte!

Olvidé mencionar: esto no agregará mucho a la seguridad ya que los enlaces seguirán conteniendo identificadores, solo limpiará la barra de direcciones.

Aquí hay un código de muestra que debería funcionar. Si se llama a show? Id = 42, se guarda id = 42 en la sesión, luego se redirige a show y se agrega id = 42 a los parámetros antes de continuar el procesamiento. Hace lo que quiere, pero como se comentó, puede que no siempre sea una cosa sabia.

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
wwwclaes 2 jun. 2011 a las 20:04