是否可以隐藏/屏蔽java play框架中的url。我遇到的问题是我希望用户能够登录并查看属于他们的消息,但我不希望任何旧用户通过简单地破解网址来找到这些消息。
我得到的是Notifications控制器,它有一个名为show(long id)的方法。
此方法的路线是:
GET /Message/Show Notifications.show
我使用
调用该函数@Notifications.show(':id')
此功能的网址是:
http://localhost:9000/Message/Show?id=8
是否可以删除网址末尾的参数,以便人们无法通过猜测参数来破解某些网址。
答案 0 :(得分:5)
这可以通过Interceptions实现。
http://www.playframework.org/documentation/1.2.3/controllers#interceptions
在这些类中,您可以检查当前用户是否已登录(存储在会话中)
答案 1 :(得分:2)
如果我做对了,你想要隐藏URL,这样用户就不会知道它们而不输入它们。如果他们这样做,他们会看到他们不应该看到的内容。这很糟糕,不应该这样做,看看Security through obscurity (Wikipedia),使用可读/可收藏的URL并构建适当的登录和安全机制,如leifg suggested。
答案 2 :(得分:2)
这是我使用的方法,我不知道这是否是解决此问题的最佳方法,但它确实可以实现我想要的方式。
感谢所有的帮助和想法。
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!");
}
}
答案 3 :(得分:1)
或者您可以登录用户并仅提取 用户消息。
为什么在存在非常简单的解决方案时搜索混淆解决方案,例如混淆/拦截等等。使用已连接用户的会话,仅获取他的消息并完成。