java - Tapestry 5 URL 操作

标签 java tapestry

我们的 Tapestry5 应用程序中有一个 ViewRecordScreen,其 URL:

http://host:8080/app/viewRecord

要从我们的搜索屏幕查看记录,您只需单击页面链接即可。但是,如果您右键单击该链接并选择“复制链接地址”,您会得到:

http://host:8080/app/searchresults:viewRecord/12345678

我现在可以通过更新 id 来操作该 url 以查看其他记录。在 Tapestry 5 中防止 URL 操作的最佳方法是什么(我假设我必须编写一些服务器端验证代码,但我希望 Tapestry 可能有一些我不知道的东西可以提供帮助。)

提前致谢。

最佳答案

与任何应用程序一样,安全性是开发人员的责任。您不能信任 URL,并且应始终确保用户有权查看/编辑实体,而不是盲目地让他们这样做,因为 URL 是这么说的。

您可能知道,Tapestry 可以使用 ValueEncoder 自动在客户端字符串和服务器端对象之间进行转换。 s。如果您使用 Tapestry-hibernate,它将自动为您的所有实体创建 ValueEncoder。然后,您可以在服务器端使用实体作为激活上下文或事件上下文,Tapestry 将根据 ID 生成 URL。

如果您希望拦截从字符串到服务器端对象的强制转换,您可能需要装饰 ValueEncoderSource使用您自己的自定义安全检查。这很可能会从 session 中查找登录的用户。

我个人认为,您不应该修饰 ValueEncoderSource。您应该拥有用于获取和更新实体的服务。服务应将 User 对象作为参数,并应在获取/更新之前进行验证。可以从传递到服务层的页面/组件中的 session 中查找用户。

例如:

public interface FooService {
    public Foo[] getAllFoos(User user);
    public Result updateFoo(User user, Foo foo);
    public Result createFoo(User user, Foo foo);
}

关于java - Tapestry 5 URL 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18078767/

相关文章:

java - 从 Java 函数向 JS/JQuery 函数分配/传递值

java - 如何将zip文件写入httpresponse

java - 创建大型 BufferedImage 的更快方法

java - Spring Boot 2.2,JPA > 如果第二个字母大写,则无法定位属性

java - 如何刷新 Java 小程序?

java - 我想在 Tapestry 页面中发布包含酒店的列表,但此错误反复出现

java - 在 Tapestry 中使用自定义创建的组件

java - 为应用程序中的单个 Tapestry 4 页面设置 ISO-8859-1 编码,否则完全是 UTF-8

java - 如何创建 JSP 页面和共享数据库连接

javascript - 通过ajax Tapestry 5加载脚本