有没有办法使用Grails应用程序隐藏地址栏中的URL。现在,Web应用程序的用户可以从地址栏中查看和更改请求参数值,并在显示页面中看到记录ID。
是否有Javascript或Groovy(URL Mapping)或Grails(.gsp)或HTML或Tomcat(server.xml或conf.xml或webapps中的应用程序内的web.xml)中的方法
ex(http://www.example.com/hide/show /)我想避免使用此网址并始终查看(http://www.example.com)或(http://www.example.com)。 com / hide / show)没有记录ID
有没有办法阻止这种情况?
答案 0 :(得分:1)
不,即使您使用window.open
打开新窗口,大多数浏览器也不允许您隐藏地址字段。这是一项安全功能,因此一个站点不能轻易伪装成另一个站点。
您的应用程序应进行安全检查,以便一个用户无法访问只有其他用户才能看到的数据。无论如何,隐藏URL都不安全,您可以使用浏览器内置的工具或随时可用的插件轻松解决这个问题。
答案 1 :(得分:0)
答案 2 :(得分:0)
您可以使用Post / Redirect / Get:
的变体处理此问题http://en.wikipedia.org/wiki/Post/Redirect/Get
在我们的Grails网站上,我们有很多搜索字段。当用户点击分页链接时,所有这些搜索字段都会在创建丑陋URL的URL中结束:用户将这些地址加入书签的风险可能会影响未来的问题。
我们通过不仅保存所有POST而且还通过参数GET保存到会话中来解决了这个问题,重定向到没有参数的GET并将它们再次附加到控制器中。这不仅创建了很好的URL:s而且还创建了一个内存,这样如果用户返回到之前的菜单,则会重新显示该菜单中的所选详细信息。
对于您在“show / 42”中隐藏ID的特定请求,您可以同样处理或者可能将Grails配置为使用“show?id = 42”,但我们没有这个要求所以我没有'我进一步研究了这个问题。祝你好运!
忘记提及:这不会增加安全性,因为链接仍然包含id,它只会清理地址栏。
以下是一些应该有效的示例代码。如果调用show?id = 42,它会在会话中保存id = 42,然后重定向到show,并在进一步处理之前将id = 42添加到params。它做你想做的事,但是评论说它可能并不总是明智的事。
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
}
答案 3 :(得分:0)
不太清楚你的意思,但我会更改UrlMappings.groovy中的默认根URL映射,所以看起来有点像这样:
static mappings = {
"/$controller/$action?/$id?"{
constraints {
// apply constraints here
}
}
//Change it here!!!!
"/"(controller: 'controllerName', action: 'actionName')
你想要的是'actionName'和'controllerName' - 你的例子中是'hide','show'吗?
比通过帖子而不是get传递所有参数,只需更改<g:form>
方法即可。
您仍然显然需要按照其他海报的规定实施控制器中所需的任何安全检查。
谢谢,
吉姆。