OldApp.warとnewApp.warがデプロイされたTomcat 7セットアップがあります。両方のアプリケーションは、データベース上のユーザーの同じログイン資格情報を共有します。
それぞれhttps://localhost/oldApp
とhttps:localhost/newApp
を使用してアプリにアクセスできます。
私のoldAppはSpring MVC Javaアプリケーションであり、ユーザーがoldAppにログインすると、ログイン資格情報を要求せずにユーザーをnewAppに移動するリンクが必要です。
これを行うためにSSOを実装する方法を知りたいです。これを処理するために外部サービスを実行したくないのが望ましいです。
前もって感謝します。
SSOはさまざまな方法で実装できます。
SAML 2.0には、Identity/Serviceプロバイダーロールの多くの実装があります。
IDP実装リストについては、このstackoverflowの投稿を参照できます。 https://stackoverflow.com/a/761774/126414
サービスプロバイダーの実装を計画している場合は、ニーススプリング拡張機能があります。 http://static.springsource.org/spring-security/site/extensions/saml/index.html
更新:2018年以降の情報は古くなっています。新しいアプリケーションを開始する場合は、Open ID ConnectなどのフェデレーションIDプロトコルを使用すると、無料でSSOを取得できます。
あなたが取ることができるいくつかのアプローチがあります:
CASサーバー(これは戦争に過ぎません)をTomcatにデプロイし、それに応じてWebアプリのフィルターを構成できます。この link からヘルプを得ることができます。
私はTomcatのSSO Valveでこれを管理しました:
server.xml
ファイルのホスト(localhost)要素内にSSOバルブを配置します。
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.Apache.catalina.authenticator.SingleSignOn" /> </Host>
ユーザーとロールを追加します(例:Tomcat_users.xml
):
<user username="user1" password="user1" roles="employee"/>
アプリのweb-app
要素web.xml
ファイルに、セキュリティ制約を追加します。
<security-constraint> <web-resource-collection> <web-resource-name>App name</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>employee</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <realm-name>file</realm-name> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config> </login-config> <security-role> <role-name>employee</role-name> </security-role>
それでおしまい。次に、いずれかのアプリにログインすると、他のアプリにログインするはずです。
もちろん、本番環境ではプレーンテキストのパスワードを使用しないでください。これは簡単な例です。 ダイジェスト認証 、および TomcatでSSLを設定する を考慮する必要があります。
これが誰かを助けることを願っています!
追伸ユーザーをSQLデータベースに保存する場合は、この回答の下のコメントを確認してください。