XPages アプリケーションで、一部の (機密) 情報をapplicationScopeに保存して、すべてのユーザーがアクセスできるようにしたいと考えています。ただし、アプリケーションの ACL は、匿名ユーザーがパブリック ドキュメントを読み取ることができるように構成されています。それでも、私は彼らに applicationScope へのアクセスを許可したくありません。匿名ユーザーが applicationScope にアクセス/読み取ることは可能ですか?
2 に答える
すべてのスコープ変数 ( を含むapplicationScope
) はメモリコンテキストです。この場合の「スコープ」という用語は、それぞれにアクセスできる範囲の広さを指します。
requestScope
単一の HTTP リクエストの間、現在のページ内で実行されている任意のコードからアクセスできます。この時点で、オブジェクトは破棄されます。他のすべてのページ、および同じページ インスタンスに対する後続の要求には、独自の個別のrequestScope
.
viewScope
そのページ インスタンスの存続期間中、現在のページ内で実行されている任意のコードからアクセスできます。他のページ (同じユーザーがアクセスしたページを含む) には、独自のviewScope
. 同様に、ユーザーが別のページに移動してから前のページに戻った場合、それはページの新しいインスタンスviewScope
であるため、新しいページです。
sessionScope
単一の HTTP セッション中に任意のページ内で実行される任意のコードからアクセスできます。これは、認証ではなく、ブラウザーのセッション Cookie に関連付けられています。したがって、後で匿名ユーザーがログインしても、同じsessionScope
です。後でログアウトしてもsessionScope
、ブラウザを閉じるか、アプリケーションがストレージをクリアするまで、同じままです。
applicationScope
現在のアプリケーション内の任意のページ内で実行されている任意のコードからアクセスできます。これにより、ユーザー間で共有できるようになります。User1 が 1 つのコンピューターにアクセスしているときに、User2 が同じ NSFapp1.nsf/page1.xsp
内の同じページ (または別のページ) にアクセスしている場合、変数は正確に両方のユーザーが同じメモリ内オブジェクトを保持するため、あるユーザーが実行したコードを介して保存されたデータは、アプリケーションがストレージをクリアするまで、別のユーザーが実行したコードを介して取得できます。applicationScope
しかし、User1 が の任意のページにアクセスしapp1.nsf
、User2 (または匿名) が の任意のページにアクセスしてapp2.nsf
いる場合、変数applicationScope
は、ユーザーごとに異なるメモリ内オブジェクトを参照します。これは、ユーザーが異なるアプリケーションにアクセスしているためです。他のアプリでディスク上のデータにアクセスします。変数が参照するメモリ内オブジェクトは、変数がアクセスまたは作成する可能性のあるディスク上のapplicationScope
データが格納されている場所に関係なく、NSF ごとに異なります。
そのため、あなた(および同じ NSF でコードを書いている他のすべての人) は、機密情報を保存applicationScope
して、アクセスしてはならないユーザーに公開することを避けるために、ロジックをどのように構造化するかについて引き続き注意を払う必要がありますが、そうではありません。同じメモリ スコープにアクセスする他のアプリケーションから実行されるコードについて心配する必要があります。コードは、そのコードが同じ NSFapplicationScope
から実行された場合にのみ、保存したデータを読み取ることができます。
XPage の可視コントロールを介して値を公開する場合、ユーザーは applicationScope およびその他のスコープ変数からのみ値を読み取ることができます。したがって、値を公開しないと、ユーザー (匿名かどうかに関係なく) は値を見ることができません。