2017-04-07 10 views
0

私はサーブレットを介してJavaバックエンドを呼び出しています。APIの呼び出しごとに、私はパスワードとユーザー名を提供する必要があります。ユーザーのパスワード/ユーザー名を変数に保存して、ユーザーがAPIを呼び出すたびに使用できるようにすることはできますか?同じサーブレットを使用する複数のユーザーは、それぞれの変数をオーバーライドしますか?

複数のユーザーがいる場合は、変数が上書きされますか?

おそらく、すべてのユーザーが新しい「新鮮な」サーブレットを取得するのか、以前にユーザーから保存したデータですか?

+0

サーブレットは、スレッドごとに要求を実行するため、以前の要求からのデータは保存されません。セッションを使用できます。 – Abubakkar

答えて

2

サーブレットはパフォーマンス上の理由から共有されるため、ステートレス(またはスレッドセーフですが、ホイールを再改造してください)にする必要があります。ユーザーとの状態を維持する必要がある場合は、HttpSessionに入力してください。

0

すべてのユーザーは、新しい「新鮮な」サーブレットを取得するのですか、以前には ユーザーから保存されたデータですか?

サーブレットのインスタンスが作成されます一度だけ(あなたがSingleThreadModelを使用してのような異なった何かをやっている場合を除き)&、すなわち、(などのTomcat、...のように)、1つのサーブレットインスタンスがあることを行っているコンテナによって維持すべてのリクエストで使用され、共有されます。

したがって、サーブレットのインスタンス変数を使用してデータを格納しないでください。

ユーザーのパスワード/ユーザー名を変数に保存できるので、ユーザーがAPIを呼び出すたびに を使用できますか?

JVMがをシャットダウンするときにデータのすべてを失うことになるので、あなたは、JVM(RAM)メモリにユーザーIDとパスワードを保存するべきではありませんので、あなたは、データベースのようないくつかの永続ストアを使用する必要があります(これを好む)またはファイルシステム。

0

静的変数を使用すると、変数はユーザー間で共有されます。また、同時実行性の問題であり、処理する必要があります。変数が静的でない場合、各ユーザーは除外されたインスタンスを持ちます。

とにかく、いくつかの情報を保存しておき、特定のユーザーがサーブレットを呼び出すときにそれらを取得したい場合は、HttpSessionを使用するのが一般的です。また、クライアントのhttp cookieを取得し、それ以降の呼び出しのためにサーバーに送信する必要があると考えてください。

また、サーバーがクライアントごとにAPIキーを提供するのは一般的なシナリオです。その後、クライアントがAPIを呼び出すときはいつでも。特定のhttpヘッダーを使用してキーを送信する必要があります。

サーバーとクライアント間のHTTPSなどのセキュリティで保護された接続を使用しない場合、上記のシナリオではセキュリティ上の問題が発生します。

関連する問題