试图理解iframe显示的Wick setResponsePage



我的第一个页面有到存储在数据库中的文件的链接。单击链接打开我的第二个页面,该页面以<iframe>的形式显示文档。我试过三种方法调出第二页。其中一种方法不起作用,另外两种方法也不安全:点击后退注销,重新打开页面。

数据库中的文件被复制到服务器上的MyProject/web/文件夹中。<iframe src=...>属性将替换为被覆盖的InlineFrame#onComponentTag(ComponentTag tag)的文件路径。

方法1找不到文件。我更喜欢使用这种方法,因为它是最安全的。第一页

setResponsePage(DisplayResourcePage.class, params);

第二个页面应该从数据库中获取文件。

DisplayResourcePage(PageParameters parameters) {..}

一些诊断。浏览器显示404文件未找到错误。我不确定它在哪里找文件。src将被替换。初始src是否仍然会影响文件的读取位置?

realPath: C:Usersjoeworkspace.metadata.pluginsorg.eclipse.wst.server.coretmp1wtpwebappsMyProject
src before ./com.mycompany.shared.DisplayResourcePage?4-1.ILinkListener-pdfframe

方法2找到文件,但不安全。第一页

setResponsePage(new DisplayResourcePage(params));

第二个页面使用相同的构造函数从数据库中获取文件。

DisplayResourcePage(PageParameters parameters) {..}

一些诊断。src是初始<iframe src=...>属性。在任何情况下,它都会被文件路径替换。

realPath: C:Usersjoeworkspace.metadata.pluginsorg.eclipse.wst.server.coretmp1wtpwebappsMyProject
src before ./page?7-1.ILinkListener-pdfframe

方法3找到文件,但不安全。第一页

setResponsePage(new DisplayResourcePage(item.getModelObject()));

第二个页面使用不同的构造函数从数据库中获取文件。

public DisplayResourcePage(EntityOtherResourceModel resourceModelItem) {..}

诊断与方法2相同。

MyPage(AnyObject)通常比MyPage(PageParameters)更安全,因为它创建了不可书签的url。

我认为你应该关注为什么页面在注销后没有返回错误403(未授权)。对我来说,您的应用程序的身份验证逻辑存在一些问题。

另一种选择可能是将页面保存在浏览器缓存中,这就是为什么它在注销后加载,但默认情况下Wicket为页面设置"无存储"杂注。

最新更新