尝试了解iframe显示的Wick setResponsePage

时间:2018-12-28 21:23:33

标签: java iframe wicket

我的第一页上有指向存储在数据库中的文件的链接。单击链接将打开第二页,该页面以<iframe>显示文档。我尝试了三种调用第二页的方法。一种方法行不通,而另两种方法也不安全:单击“注销”后,重新打开页面即可。

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

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

setResponsePage(DisplayResourcePage.class, params);

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

DisplayResourcePage(PageParameters parameters) {..}

一些诊断。浏览器显示404文件未找到错误。我不确定它在哪里寻找文件。 src将被替换。可能是开头的src仍会影响预期从中读取文件的位置吗?

realPath: C:\Users\joe\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\MyProject
src before ./com.mycompany.shared.DisplayResourcePage?4-1.ILinkListener-pdfframe

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

setResponsePage(new DisplayResourcePage(params));

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

DisplayResourcePage(PageParameters parameters) {..}

一些诊断。 src是初始的<iframe src=...>属性。在所有情况下,该文件都将替换为文件路径。

realPath: C:\Users\joe\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\MyProject
src before ./page?7-1.ILinkListener-pdfframe

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

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

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

public DisplayResourcePage(EntityOtherResourceModel resourceModelItem) {..}

诊断与方法2相同。

1 个答案:

答案 0 :(得分:0)

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

我认为您应该关注退出页面后页面不返回错误403(未授权)的原因。对我来说,您的应用程序的身份验证逻辑存在一些问题。

另一种选择是将页面保存在浏览器缓存中,这就是为什么注销后才加载页面,但默认情况下,Wicket为页面设置了“无存储”编译指示。