Java Play Framework隐藏的URL路由

时间:2011-09-27 13:21:11

标签: java url parameters playframework

是否可以隐藏/屏蔽java play框架中的url。我遇到的问题是我希望用户能够登录并查看属于他们的消息,但我不希望任何旧用户通过简单地破解网址来找到这些消息。

我得到的是Notifications控制器,它有一个名为show(long id)的方法。

此方法的路线是:

GET     /Message/Show               Notifications.show

我使用

调用该函数
@Notifications.show(':id')

此功能的网址是:

http://localhost:9000/Message/Show?id=8

是否可以删除网址末尾的参数,以便人们无法通过猜测参数来破解某些网址。

4 个答案:

答案 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)

或者您可以登录用户并仅提取 用户消息。

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