在Grails应用程序中隐藏URL

问题描述

| 有没有一种方法可以使用Grails应用程序在地址栏中隐藏url。现在,Web应用程序的用户可以从地址栏中查看和更改请求参数值,并且他们可以在显示页面中看到记录ID。 是否可以使用Javascript或Groovy(URL映射)或Grails(.gsp)或HTML或Tomcat(server.xml或conf.xml或webapps中应用程序内部的web.xml)中的方法 例如(http://www.example.com/hide/show /),我想避免使用此网址,并且总是看到(http://www.example.com)或(http://www.example.com/hide / show),而没有记录ID 有办法防止这种情况吗?     

解决方法

        不可以,即使使用
window.open
打开新窗口,大多数浏览器也不允许您隐藏地址字段。这是一项安全功能,因此一个站点无法轻易地伪装成另一个站点。 您的应用程序应进行安全检查,以使一个用户无法访问仅另一用户应看到的数据。无论如何,仅仅隐藏URL并不安全,您可以使用浏览器中内置的工具或易于使用的插件轻松解决该问题。     ,        这是grails实现的静态URL模式的一部分。 最好的隐藏URL的方法是在您希望用户在其地址栏中看到的页面内使用iframe。     ,        不太清楚您的意思,但是我会更改UrlMappings.groovy中的默认根URL映射,因此它看起来像这样:
    static mappings = {

    \"/$controller/$action?/$id?\"{
        constraints {
            // apply constraints here
        }
    }
    //Change it here!!!!
    \"/\"(controller: \'controllerName\',action: \'actionName\')
您想让\'actionName \'和\'controllerName \'成为哪里-在您的示例中为'hide \',\'show \'? 比通过post而不是get传递所有参数,只需更改
<g:form>
方法。 显然,您仍然需要按照其他海报所述在控制器中实施所需的任何安全检查。 谢谢, 吉姆     ,        您可能可以使用Post / Redirect / Get的变体来处理此问题: http://zh.wikipedia.org/wiki/邮寄/重定向/获取 在我们的Grails网站上,我们有很多搜索字段。当用户单击分页链接时,所有这些搜索字段均以创建丑陋URL:s的URL结尾,从而给用户添加书签的那些地址添加了更高的风险,这可能意味着将来出现问题。 我们通过将所有POST以及带有参数的GET保存到会话中,将其重定向到不带参数的GET并将它们再次添加到控制器中来解决此问题。这不仅会创建漂亮的URL :,而且还会创建一个内存,因此,如果用户返回到先前的菜单,则会重新显示该菜单中的选定详细信息。 对于您要在\“ show / 42 \”中隐藏ID的特定请求,您可以同样处理,也可以将Grails配置为使用\“ show?id = 42 \”,但是我们没有此要求,所以我没有进一步研究该问题。祝好运! 忘了提及:由于链接仍将包含id,因此只会增加地址栏,不会对安全性有多大作用。 这是一些应该起作用的示例代码。如果调用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
  }