2

在 XPages 应用程序中,我想在 applicationScope 中存储一些(机密)信息,使其可供所有用户访问。但是,应用程序的 ACL 配置为允许匿名用户阅读公共文档。不过,我不希望他们访问 applicationScope。匿名用户是否可以访问/读取 applicationScope?

4

2 回答 2

6

所有范围变量(包括applicationScope)都是内存上下文。在这种情况下,术语“范围”是指每个可以访问的范围。

requestScope在单个 HTTP 请求期间,任何在当前页面中执行的代码都可以访问该对象,此时对象被销毁。任何其他页面,以及针对同一页面实例的任何后续请求,都有自己独立的requestScope.

viewScope在该页面实例的生命周期内,可以由在当前页面中执行的任何代码访问。其他页面 - 包括由同一用户访问的页面 - 有自己的viewScope. 类似地,如果用户导航到另一个页面,然后导航回前一页面,那是一个新页面,viewScope因为它是该页面的一个新实例

sessionScope在单个 HTTP 会话期间,任何页面内执行的任何代码都可以访问。这与浏览器中的会话 cookie 相关,与身份验证无关。因此,如果匿名用户稍后登录,它仍然是相同的sessionScope。如果他们稍后注销,他们仍然拥有相同sessionScope的权限,直到他们关闭浏览器或应用程序清除存储空间。

applicationScope可以通过在当前应用程序的任何页面内执行的任何代码访问。这就是允许它在用户之间共享的原因:如果 User1 正在一台计算机上访问,而 User2 正在访问同一 NSFapp1.nsf/page1.xsp内的同一页面(或不同页面),则它们具有相同的值——该变量正是指两个用户使用相同的内存对象——因此通过一个用户执行的代码存储的任何数据都可以通过另一个用户执行的代码检索,直到应用程序清除存储。applicationScope

但是,如果 User1 正在访问中的任何页面,app1.nsf并且 User2(或匿名)正在访问中的任何页面app2.nsf,则该变量applicationScope指的是每个用户的不同内存中对象,因为他们正在访问不同的应用程序,即使任何一个应用程序中有代码访问其他应用程序中的磁盘数据。变量引用的内存对象applicationScope在每个 NSF 中都是不同的,无论它可能访问或创建的任何磁盘数据恰好存储在何处。

因此,您(以及在同一 NSF 中编写代码的任何其他人)仍然需要注意如何构建逻辑以避免将敏感信息存储在applicationScope其中,然后将其暴露给不应访问它的用户,但您没有需要担心从访问相同内存范围的其他应用程序执行的代码。applicationScope如果该代码是从同一个 NSF执行的,则代码只能读取您存储在您的数据中的数据。

于 2013-09-18T16:35:26.703 回答
1

如果您通过 XPage 上的可见控件公开值,则用户只能从 applicationScope 和其他范围变量中读取值。因此,如果您不公开这些值,那么用户(无论是否匿名)都无法看到该值。

于 2013-09-18T08:21:50.097 回答