问题描述
|
有没有一种方法可以使用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
}