2

私が開発している Jetty 9 アプリケーションは、JarFiles のセットで web.xml を自動的にスキャンし、含まれている webapps をプログラムで WebAppContexts としてインポートします。Jetty 6 の次のチュートリアルで説明されているように、個々の Web アプリケーション間でシングル サインオンを実装する必要があります: http://docs.codehaus.org/display/JETTY/Single+Sign+On+-+Jetty+HashSSORealm。残念ながら、HashSSORealm は Jetty から削除されたようです。シンプルな SSO を実装するための実行可能な代替手段はありますか?

Fediz jetty プラグインを推奨するこの投稿を見つけましたが、そのようなものが存在する場合は、ネイティブの jetty ソリューションを使用することをお勧めします: http://dev.eclipse.org/mhonarc/lists/jetty-users/msg03176.html

詳細情報:

中心的な問題は、各 WebAppContext に独自の SessionManager が必要なため、同じ Cookie を使用している場合でも、WebAppContext が互いに情報を共有できないことです。

4

2 に答える 2

2

私は問題を解決しました.SessionManagerの同じインスタンスを各WebAappContextのSessionManagerに割り当てるだけです。すべての WebAppContexts が /webapps/ コンテキスト パスの下にグループ化されていると仮定すると、次のようになります。

 // To be passed to all scanned webapps. Ensures SSO between contexts
SessionManager sessManager = new HashSessionManager();
SessionCookieConfig config = sessManager.getSessionCookieConfig();
config.setPath("/webapps/"); // Ensures all webapps share the same cookie

// Create the Handler (a.k.a the WebAppContext).
App app = new App(deployer, provider, module.getFile().getAbsolutePath());
WebAppContext handler = (WebAppContext)app.getContextHandler(); // getContextHandler does the extraction
// Consolidating all scanned webapps under a single context path allows SSO
handler.setContextPath("/webapps" + handler.getContextPath());
// Cookies need to be shared between webapps for SSO
SessionHandler sessHandler = handler.getSessionHandler();
sessHandler.setSessionManager(sessManager);
于 2013-10-24T11:43:21.107 に答える
1

WebAppContext 間で SessionManager を共有すると、それらのすべての WebAppContext がまったく同じセッション インスタンスを共有します。サーブレット仕様では、WebAppContexts はセッション コンテンツではなく、セッション ID を共有する必要があると述べています。

1月

于 2013-10-24T22:06:24.157 に答える