質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

3回答

905閲覧

ECサイト作成,複数端末でのログイン制御等について

k_m

総合スコア11

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2018/10/18 07:20

編集2018/10/19 02:04

一か月ほど前にjsp spring bootでのECサイト作成で質問をしたものです、
購入処理、購入履歴参照、会員登録、会員情報変更等の機能が出来てECサイト作りも終盤なのですが
最後で問題が起きてしまいました

端末Aから田中でログイン、端末Bでサイトに入ると既に田中でログインされた状態
端末Aでカートに商品を入れると端末Bにも反映されるような状態なのですがこれを解決する手段が
まったく思い浮かばない状態です。

端末Aから田中でログインしていても端末Bで接続したら誰もログインしていない状態の画面を表示、
そして端末Bでは田中でのログインが不可のような感じにしたいです。

こちらの解決策につきまして、
参考になるサイト、解説等頂けないでしょうか よろしくお願いします。

ご回答にあったシングルトンというキーワードを調べていたところ記事を見つけて、
@Scope("session")という記述をコントローラー側に記述してみたところ別端末等で
共有はされなくなったのですが、別端末で同じアカウントでログインできてしまうので引き続き調べてみます 解決策などありましたらご回答してくださると助かります

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/18 08:04

同じ端末同じブラウザでやってないか? ⇒端末Bでサイトに入ると既に田中でログインされた状態
k_m

2018/10/18 08:20

ノートPC(A)、ノートPC(B)のように別々の端末で試したところ上記の結果となってしまいました ブラウザも別で試しても結果一緒でした...
dice142

2018/10/18 08:38

試す前にノートPC(B)でログインしていたということないですか?ちゃんと両端末でログアウトしたことを確認してからはじめましたか?
k_m

2018/10/18 08:47

ちゃんとどちらの端末もログアウトした状態ということを確認したうえで試したのですが結果変わりませんでした....
tanat

2018/10/18 10:03

カート以外、例えば会員情報変更では同様の問題は起きていないということでしょうか?
退会済みユーザー

退会済みユーザー

2018/10/18 10:10

コントローラーはシングルトン(ボソッ)
k_m

2018/10/19 00:12

おはようございます カート以外でも同様の問題が起きております シングルトン?というのがちょっと分からないので調べてみます
k_m

2018/10/19 01:36

@Scope("prototype")を使うという記事を見つけコントローラー側などに記述してみましたが 共有はされなくなったのですが、画面を更新するとカートに入れてた商品が消えてたりログインが消えてたりと問題がたくさん出てきました
k_m

2018/10/19 01:53

様々なご回答ありがとうございます @Scope("session")という記述をコントローラー側に記述してみたところ希望していたとおりの動きをしました
guest

回答3

0

ベストアンサー

認証情報や認証情報に紐づく情報をセッションスコープで管理するように変更するのが一番簡単で堅牢ですが、状況から察するにそれだけではなく、実装に問題があるかと思います。

例えばControllerやServiceクラスのフィールドに格納して使いまわす実装をしてしまった場合は適切なスコープにバインドするよう見直すか、メソッドの引数に必要な値をすべて渡すように直すかになります。

SpringFrameworkは、特にスコープを指定しなかった場合はシングルトンになりますが、これをセッション単位に分けたい場合は、例えば以下のようになるでしょう。(要:cglib)

java

1import org.springframework.context.annotation.Scope; 2import org.springframework.context.annotation.ScopedProxyMode; 3import org.springframework.stereotype.Service; 4import org.springframework.web.context.WebApplicationContext; 5 6@Scope(proxyMode=ScopedProxyMode.TARGET_CLASS, scopeName=WebApplicationContext.SCOPE_SESSION) 7public class SampleService { 8 .... 9}

投稿2018/10/19 02:16

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k_m

2018/10/23 01:30

返信遅くなり申し訳ありません 体調不良で寝込んでました 共有自体はされなくなりました いまだに同じIDでログインできる状態ですが、結構時間がたってしまったので一端質問を閉じます しばらく考えてみてどうしてもわからなければまた質問します みなさま回答ありがとうございました
guest

0

  1. セッションの件

ECサイトの場合
「ログイン情報」「カート内情報」は、セッションで連れ回します。
「購入確定」時に「カート内情報」+「購入者ID(配送先ID、、、)」をDBに格納します。
そうすれば、ご希望の動作になります。

Springの場合シングルトンなので、セッション分離が出来無いですね。
失礼しました。

  1. ログインロックの件

 derbyで、ログインロックしてみては?

 ※ただ、ECなのに、なぜ、ログインロックするのかは「???」ですが。

投稿2018/10/19 00:49

編集2018/10/19 04:59
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

セッション管理用の DB を建て、排他制御を行うのが正攻法かと。

投稿2018/10/18 07:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k_m

2018/10/18 08:18

回答ありがとうございますDBについては元々用意されているDBのみを使ってECサイトを作ってと言われており 新しく建てたりはせずに対応しなければいけないです.....
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問