0

私はgrailsアプリケーションに取り組んでいます。ユーザー管理には、Grails の Spring Security Core PlugIn を使用しています。ユーザーがログインしたままになるまで、現在ログインしているユーザーに固有の情報を保存し、この情報をすべてのブラウザーで利用できるようにしたいと考えています。スコープベースのサービスを使用してこれにアクセスしようとしました。だから私はサービスを作成しました:

class LoggedInUserSessionDataService {

    String searchParams
    String searchQuery

    //This service will get expire when loggedin user's session will expire
    static scope = 'session'
}

そして、resources.groovy ファイルでそれをプロキシします。

loggedInUserSessionDataServiceProxy(org.springframework.aop.scope.ScopedProxyFactoryBean) {
    targetBeanName = 'loggedInUserSessionDataService'
    proxyTargetClass = true
}

次に、コントローラーにこのプロキシを挿入しました。

def loggedInUserSessionDataServiceProxy

結局のところ、保存された情報は特定のブラウザでのみ利用でき、他のブラウザでこの情報にアクセスしようとすると、そのブラウザでもアクセスできるはずですが、見つかりません。

これを達成する方法を教えてください。範囲ベースのサービスでは不可能な場合、他のオプションは何ですか?

PS 同じブラウザ ユーザーがログインしている間、保存された情報が同じブラウザで引き続き利用できることは正常に機能します。

御時間ありがとうございます :)

4

1 に答える 1

0

ユーザーが別のブラウザーからログインすると、同じユーザーとしてサインインしていても、別のセッションが割り当てられます。何らかの方法で 2 つのセッションをリンクする必要があります。

考えられる解決策の 1 つは、データを保持する抽象化されたセッションがどこにあるかのFooServiceようなデータ構造を含む通常のシングルトン サービスを作成することです。カウンターも含まれます。ユーザーがログインすると、既存のインスタンスを返すか、新しいインスタンスを作成してカウンターを 1 増やします。セッションが終了すると、カウンターを減らすサービスが呼び出されます。カウンターが 0 になったら、マップからキーを削除して、その「セッション」をリセットします。Map<User, SessionData>SessionDataLoggedInUserSessionDataServicefooService.connectSession(user)SessionDatafooService.disconnectSession(user)user

于 2014-12-08T11:43:35.977 に答える