Java Play框架隐藏Url路由



是否可以在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!");     
        }
    }

或者您可以登录用户并只获取用户消息。

当一个非常简单的解决方案存在时,为什么要搜索复杂的解决方案,如混淆/拦截等。使用已连接用户的会话,只获取他的消息并完成。

最新更新