4

Spring を使用して services/dao/database と統合する JSP Struts アプリケーションがあります。基本的に、struts は spring を使用して DB からデータを取得し、フォームを構築して JSP ファイルに転送します。

Tiles を使用して各 JSP ファイルに挿入されるヘッダー ファイルがあります。ヘッダー内の各ページに「Welcome John Doe」を表示したいと思います。「John Doe」は、現在ログインしているユーザーの名前です。

それを行うための最良のアプローチは何ですか?私が考えることができる解決策は次のとおりです。

  1. Spring Filter を使用して http リクエストをキャッチします。ユーザー ID(*) を含む Cookie を使用してデータベースからユーザーをロードし、その名前を「CurrentUser」という名前のセッション Bean に入れます。

  2. 「header.jsp」で、Spring アプリケーションのコンテキストを取得します。それを使用して、Bean「CurrentUser」をロードし、名前を取得します。名前をhtmlに入れます。

私はこれを機能させることができると思います。しかし、これが最善の方法であるとは確信していません。私のアプローチについて何か考えはありますか?


(*)もちろん、クッキーは暗号化されます

4

2 に答える 2

1

かなり単純なユースケースには非常に大きなハンマーかもしれませんが、 ELResolverを使用することで、本当にきちんとした spring-jsp 統合 (jsp 2.1 が必要です!) が得られました。このチュートリアルに従うことで、基本的に、Spring Managed Bean を el-context に注入し、次のように jsp-el を使用してアクセスできるようにすることができます。

${spring.mybean.myproperty}

事前定義された Bean を el-context に注入するか、単に "mybean" を getBean に渡し、Spring で管理されるほとんどすべてのものに jsp からアクセスできるようにするかを選択できます。mybean は、簡単にセッション スコープの Spring Bean にすることができます。

ただし、これがタイルとどのように一致するかは完全にはわかりません。

于 2009-05-13T15:28:07.090 に答える
0

セッションにある種のUserオブジェクトをまだ保存していませんか?

そうであれば、このドメイン オブジェクトに「getFullName()」メソッドを追加し、DAO がそれを返すときにそれを設定するだけです。理想的にはUser、ユーザーがログインしたときにオブジェクトを設定し、それをセッションに保存し、ページ要求ごとにデータベースからユーザーのすべての詳細を再度ロードする必要がないようにする必要があります。

(Spring Security を使用していませんか? もしそうなら、UserDetailsSession に似たオブジェクトを格納する非常に簡単な方法と、それに簡単にアクセスできる方法を提供します。)

私はあなたの両方のアプローチに反対票を投じます。

  1. これは、(少なくとも) ページ要求ごとに余分なデータベース呼び出しが発生することを意味します
  2. 他のユーザーが同じコンテキストで同じ Bean を共有している場合、これは機能しません。また、データ サービスと直接対話する JSP ファイル (プレゼンテーション レイヤー) を使用するべきではありません。
于 2009-05-12T19:03:07.137 に答える