在XPage应用程序中,我想在 applicationScope 中存储一些(有信心的)信息,以便所有用户都可以访问它。但是,应用程序的ACL配置为允许匿名用户读取公共文档。不过,我不希望他们有权访问applicationScope。匿名用户是否可以访问/读取applicationScope?
答案 0 :(得分:6)
所有范围变量(包括applicationScope
)都是内存上下文。在这种情况下,术语“范围”指的是每个都可以被广泛访问。
requestScope
,此时对象将被销毁。任何其他页面以及针对同一页面实例的任何后续请求都有各自独立的requestScope
。
viewScope
可以在当前页面内执行的任何代码访问该页面实例的生命周期。其他页面 - 包括由同一用户访问的页面 - 都有自己的viewScope
。同样,如果用户导航到另一个页面,然后导航回上一页,那就是新的viewScope
,因为它是页面的新实例。
sessionScope
。这与浏览器中的会话cookie相关联,而不是与身份验证相关联。因此,如果匿名用户稍后登录,则它仍然是相同的sessionScope
。如果他们稍后注销,他们仍然拥有相同的sessionScope
,直到他们关闭浏览器或应用程序清除存储。
applicationScope
。这是允许它在用户之间共享的原因:如果User1在一台计算机上访问app1.nsf/page1.xsp
而User2正在相同的NSF 中访问同一页面或不同的页面,它们具有相同的applicationScope
- 变量对于两个用户都指的是完全相同的内存中对象 - 因此,通过由另一个用户执行的代码可以检索由一个用户执行的代码存储的任何数据,直到应用程序清除为止存储。
但是,如果User1正在访问app1.nsf
中的任何页面而User2(或匿名)正在访问app2.nsf
中的任何页面,则变量applicationScope
指的是每个用户的内存中对象,因为他们正在访问不同的应用程序,即使任一应用程序中的代码访问其他应用程序中的磁盘数据。 applicationScope
变量所引用的内存中对象在每个NSF中都是不同的,无论它可能访问或创建的任何 on-disk 数据发生在何处存储。
所以你(以及在同一个NSF中编写代码的其他人)仍然需要勤勉地研究如何构建逻辑以避免在applicationScope
中存储敏感信息然后将其暴露给不应该访问它的用户,但您不必担心从访问相同内存范围的其他应用程序执行的代码。代码只能读取您在applicationScope
中存储的数据,如果该代码是从相同的NSF 执行的。
答案 1 :(得分:1)
如果您通过XPage上的可见控件公开值,则用户只能从applicationScope和其他范围变量中读取值。因此,如果您不公开值,那么用户(匿名或非匿名)无法看到该值。