是否可以在java play框架中隐藏/屏蔽url ?我遇到的问题是,我希望用户能够登录并查看属于他们的消息,但我不希望任何旧用户通过简单地破解url来找到这些消息。
我得到的是一个通知控制器,它有一个名为show(long id)的方法。
这个方法的路由是:
GET /Message/Show Notifications.show
i调用函数使用
@Notifications.show(':id')
这个函数的url是:
http://localhost:9000/Message/Show?id=8
是否可以删除url末尾的参数,这样人们就不能通过猜测参数来破解某些url
这是可以通过拦截来实现的。
http://www.playframework.org/documentation/1.2.3/controllers被拦截
在这些类中,您可以检查当前用户是否已登录(存储在会话中)
如果我没弄错的话,您想要隐藏url,这样用户就不会知道它们,也不会输入它们。如果他们这样做,他们会看到他们不应该看到的内容。这是不好的,不应该这样做,看看通过模糊的安全性(维基百科),使用可读/书签url,并像leifg建议的那样构建适当的登录和安全机制。
这是我使用的方法,我不知道这是否是最好的方法,但它确实是我想要的。
感谢所有的帮助和想法。
public static void show(long id)
{
Notification notification = Notification.findById(id);
User connectedUser = User.find("byEmail", Security.connected()).first();
if(notification.recipient.equals(connectedUser))
{
render(notification);
}
else
{
forbidden("This isnt your message stop hacking the urls!");
}
}
或者您可以登录用户并只获取用户消息。
当一个非常简单的解决方案存在时,为什么要搜索复杂的解决方案,如混淆/拦截等。使用已连接用户的会话,只获取他的消息并完成。