0

データベース、サーバーを使用したSpring 4 mvcアプリケーションに取り組んでいます。基本的に、私は で使用されるスプリング レストを作成しています。mysqltomcatAngular JS

注:私は使っていませんSpring security

の場合のセッション複製を避けるためにclustered environment、アプローチを使用しcookieています。ログイン時にone unique session id( using java UUID) を生成し、それを使用して を作成cookieし、応答に Cookie を設定します。データ。

すべての残りの API を認証するために、Spring interceptorすべての残りの API 呼び出しを傍受し、リクエストに Cookie があるかどうかを順番にチェックする を作成しました。存在する場合は、セッション ID 値を取得して使用し、データベースを作成します。有効かどうかを確認するために呼び出します。ログアウト時に、Cookie を削除しています。

上記で説明したように私がやっていることに基づいて、いくつか質問があります。

1) Is my approach correct? or do you see any flaw in it.  
2) Let me know if there is any other better method to achieve the same i.e. to avoid session replication.  
3) Since, I am not using any HTTP session, how do I achieve something like session-timeout or do i even need it?
4

1 に答える 1

0

1) 私のアプローチは正しいですか? または、それに欠陥がありますか。

良いアプローチです。ただし、優先順位に従っていくつかのポイントがあります:-

  • API を使用して多くのリクエストを処理している場合は、DB ではなくメモリ内キャッシュの使用を検討してください。DB へのアクセスは、比較的コストがかかります。多くは主観的なものであり、セットアップによって異なりますが、セッションを超えて存続させたいデータのDBを検討してください。API トークンなどのメモリ内キャッシュなど、より一時的で高速なストアを使用することをお勧めします。クラスタ全体の場合は、分散キャッシュ ソリューションを検討してください。

  • Cookie の使用は必ずしもセキュリティ上のリスクではありませんが、CSRFについて少し読んでください。Cookie 自体ではなく、HTTP ヘッダーでトークンを渡す方が安全です。つまり、CSRF が心配な場合です (私は自分のアプリでヘッダー アプローチを使用していますが、CSRF は比較的まれであり、あなたの機密性に依存すると思います)。データは)

2)同じことを達成するための他のより良い方法、つまりセッションの複製を避ける方法があれば教えてください。

1 への応答に追加するものは何もありません。)

3) 私は HTTP セッションを使用していないので、session-timeout のようなものを達成するにはどうすればよいですか、それとも必要ですか?

タイムスタンプをトークンと共に (できればキャッシュに) 格納し、トークンを使用するトランザクションごとにキャッシュで更新します。次に、トークンが有効かどうかを確認するときに、タイムスタンプを確認します。トークンを削除してクライアントに再認証を要求するかどうかを (経過時間に基づいて) 決定できます。

于 2015-09-16T16:03:03.420 に答える