我的第一页上有指向存储在数据库中的文件的链接。单击链接将打开第二页,该页面以<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相同。
答案 0 :(得分:0)
MyPage(AnyObject)通常比MyPage(PageParameters)更安全,因为它创建了不可书签的URL。
我认为您应该关注退出页面后页面不返回错误403(未授权)的原因。对我来说,您的应用程序的身份验证逻辑存在一些问题。
另一种选择是将页面保存在浏览器缓存中,这就是为什么注销后才加载页面,但默认情况下,Wicket为页面设置了“无存储”编译指示。