実用的なspringboot+CASシングルサインオンシステム

1. Tomcat HTTPS サポートを構築する

CAS は HTTPS プロトコルを使用してユーザー要求を処理するため、HTTPS プロトコルをサポートするように Tomcat を構成する必要があります。

ステップ 1: キーストアを生成する

jdk に付属の keytool ツールを使用してキーストアを生成します。

keytool は、キーストア (キーストア) と証明書を管理するための Java Development Kit (JDK) のコマンド ライン ツールです。

keytool -genkey -alias <alias> -keyalg <algorithm> -keystore <keystore> [options]
  • -genkeyキーペアを生成し、キーストアに保存するために使用されるパラメーター。
  • -alias <alias>:生成されたキーペアのエイリアスを指定します。エイリアスは、後続の操作でキー ペアを識別するために使用されます。たとえば、-alias mykey生成されたキー ペアには「mykey」というエイリアスが付けられます。

  • -keyalg <algorithm>: キーペアの生成時に使用する暗号化アルゴリズムを指定します。一般的に使用される暗号化アルゴリズムには、RSA、DSA、EC などがあります。たとえば、-keyalg RSARSA アルゴリズムはキー ペアの生成に使用されます。

  • -keystore <keystore>: 使用するキーストア ファイルのパスと名前を指定します。キーストアは、生成されたキー ペアおよびその他の関連情報を保存するために使用されます。たとえば、-keystore mykeystore.jks生成されたキー ペアを「mykeystore.jks」という名前のキーストアに保存します。

  • -vパラメーターは詳細出力 (冗長モード) を指定するために使用されます。これにより、キー ペアの生成や証明書のインポートなどの操作の詳細なプロセスと結果を含む、より詳細な情報を表示できます。

  • [options]: キー ペアを生成するためのオプションをさらに構成するためのオプションのパラメーター。よく使用されるオプションには次のようなものがあります。

    • -keysize <size>: キーの長さを指定します。たとえば、-keysize 20482048 ビットのキー長を使用します。
    • -validity <days>: 証明書の有効期間 (日数) を指定します。たとえば、-validity 365証明書の有効期間が 365 日であることを意味します。
    • -dname <distinguished_name>: 国、組織、組織単位など、証明書の生成に使用されるサブジェクト情報を指定します。
    • -storepass <password>: キーストアのパスワードを指定します。キーストア内のキー ペアへのアクセスと管理に使用されます。

エイリアス java1234; ストレージ パス D:\CAS\keystore

keytool -genkey -v -alias java1234 -keyalg RSA -keystore D:\CAS\keystore\java1234.keystore

 ストレージパスに以下のファイルが存在することが確認できます。

  ステップ 2: キーストアから証明書をエクスポートする

keytool -export -trustcacerts -alias java1234 -file D:\CAS\keystore\java1234.cer -keystore D:\CAS\keystore\java1234.keystore
  • keytool: keytool コマンドの実行に使用されるコマンド ライン ツールの名前。
  • -export: 実行するアクションが証明書のエクスポートであることを指定します。
  • -trustcacerts: 証明書をエクスポートすると、信頼されたルート証明書もエクスポートされます。
  • -alias java1234: エクスポートする証明書の別名を「java1234」として指定します。エイリアスがキーストアに存在することを確認してください。
  • -file D:\CAS\keystore\java1234.cer: エクスポートする証明書ファイルのパスと名前を指定します。エクスポートされた証明書は、指定したファイルに保存されます。
  • -keystore D:\CAS\keystore\java1234.keystore: キーストア ファイルのパスと名前を指定します。これは、エクスポートする証明書を含むキーストア ファイルです。

このコマンドの目的は、エイリアス「java1234」を持つ証明書をキーストアからエクスポートし、指定されたファイル (D:\CAS\keystore\java1234.cer) に保存することです。

このコマンドを実行する前に、指定された別名の証明書が存在すること、およびキーストア ファイルのパスとファイル名が正しいことを確認してください。

 

ステップ 3: 証明書を JDK 証明書ストアにインポートする

keytool -import -trustcacerts -alias java1234 -file ‪D:\CAS\keystore\java1234.cer -keystore ‪D:\java\jdk1.8.0_91\jre\lib\security\cacerts

上記のコマンドは、keytool ツールを使用して、信頼されたルート証明書ストアに証明書をインポートします。コマンドの各パラメータの説明は次のとおりです。

- `keytool`: keytool コマンドの実行に使用されるコマンド ライン ツールの名前。
- `-import`: 実行する操作が証明書のインポートであることを指定します。
- `-trustcacerts`: 証明書を信頼されたルート証明書ストアにインポートすることを意味します。
- `-alias java1234`: インポートする証明書の別名を「java1234」として指定します。
- `-file D:\CAS\keystore\java1234.cer`: インポートする証明書ファイルのパスと名前を指定します。この証明書ファイルは、インポートされる証明書の内容です。
- `-keystore D:\java\jdk1.8.0_91\jre\lib\security\cacerts`: 信頼されたルート証明書ストアのパスと名前を指定します。証明書ストアは、Java インストール ディレクトリ内の cacerts ファイルであり、信頼されたルート証明書を保存するために使用されます。

このコマンドの目的は、指定されたパスにある証明書ファイル (D:\CAS\keystore\java1234.cer) を Java インストール ディレクトリの信頼されたルート証明書ストア (cacerts ファイル) にインポートし、エイリアス「java1234」を使用することです。それを識別するためです。

このコマンドを実行する前に、証明書ファイルのパスとファイル名が正しいこと、および信頼されたルート証明書ストアのパスとファイル名が正しいことを確認してください。また、操作を実行するための十分な権限があることを確認してください。

 4番目のステップ:

Tomcatのダウンロードアドレス: https://tomcat.apache.org/download-90.cgi

 ダウンロード後、CAS ディレクトリに解凍し、D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\conf ディレクトリに入って、server.xml ファイルを見つけます。

次のコードをファイルに追加します

<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
               clientAuth="false" sslProtocol="TLS"
               keystoreFile="D:\CAS\keystore\java1234.keystore"
               keystorePass="666666" />

写真が示すように

保存後に終了し、D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\bin ディレクトリに入り、startup.bat ファイルを見つけ、ダブルクリックして開いて実行します。

 実行結果は以下の通りで、文字化けが発生しました。

 conf ディレクトリに入り、次のファイルを開きます

 ファイル内のjava.util.logging.ConsoleHandler.encoding = UTF-8コードをjava.util.logging.ConsoleHandler.encoding = GBKに修正します。

 bin ディレクトリに再度入り、startup.bat ファイルを起動し、次のコマンドを実行して文字化けの問題を解決します。

 テスト

https://localhost:8443/にアクセスしてください。

Tomcat に正常にアクセスできるということは、構成が成功したことを証明します。

 2. CASサーバー戦争をダウンロードする

ダウンロード アドレス:中央リポジトリ: org/apereo/cas/cas-server-webapp-tomcat/5.3.14

 バックエンド コードを変更する必要がある場合は、github からソース コードをダウンロードし、変更後にパッケージ化し、war パッケージを公開する必要があります。

3. CAS サーバーを Tomcat に公開する

ダウンロードした war パッケージを D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps ディレクトリに配置します。

 このディレクトリにコピーすると、war パッケージは自動的に解凍され、解凍されたファイルの名前が cas に変更され、war パッケージは削除されます。

 bin ディレクトリに戻り、startup.bat ファイルを実行します。

起動に成功したら、 https://localhost:8443/cas/loginにアクセスします。 

起動に問題がなければ上記URLにアクセスできます。

 D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes ディレクトリに入り、application.properties ファイルを開きます。

つまり、cas で受け取ったユーザーは casuser、パスワードは Mellon なので、それをログイン ページに入力すると、ログインが成功します。

 入力したユーザー名とパスワードが上記と一致しない場合、認証は失敗します。

 引き続き、D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes ディレクトリにある log4j2.xml ファイルを開きます。

上記のログのベース パスを D:\CAS\log に変更します。

 ドメイン名を構成します: C:\Windows\System32\drivers\etc\hosts

ファイルを保存すると、次のエラーが発生します。

 ソリューションを提供する記事へのリンク: http://t.csdn.cn/0pLZy

試してみたところ、無事解決しました。

 ドメイン名が正常に構成されたら、https://java1234.com:8443/cas を使用してアクセスできるようになります。

4. CAS 構成データ ソースとデータベースのユーザー認証

上記のログインに使用するユーザー名とパスワードは application.properties ファイルにハードコーディングされていますが、実際の開発ではデータ ソースの構成とデータベース ユーザー認証を実行する必要があります。

a. 新しいデータとテーブルを作成する

mysqlサービスを開始する

「mysql -u root -p」と入力します。

次に、パスワードを入力して mysql シェルに入ります

mysql シェル インターフェイスで次のコマンドを順番に実行します。

CREATE DATABASE db_sso;

USE db_sso;

CREATE TABLE t_cas (
  id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(30) DEFAULT NULL,
  password varchar(100) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

insert into t_cas(id,username,password) values(1,'java1234','123456');

MySQL では 、 CREATE DATABASEステートメント を使用してデータベースを作成できます  。構文形式は次のとおりです。

CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>] 
[[DEFAULT] COLLATE <校对规则名>];

[ ]の内容はオプションです。構文は次のように説明されます。

  • <データベース名>: 作成したデータベースの名前。MySQL のデータ ストレージ領域は MySQL データベースをディレクトリ形式で表すため、データベース名はオペレーティング システムのフォルダー命名規則に準拠する必要があり、数字で始めることはできず、できるだけ意味のあるものにする必要があります。MySQL では大文字と小文字が区別されないことに注意してください。
  • 存在しない場合: データベースを作成する前に判断し、現在データベースが存在しない場合にのみ実行できます。このオプションを使用すると、データベースがすでに存在する場合の重複作成エラーを回避できます。
  • [デフォルト] CHARACTER SET: データベースの文字セットを指定します。文字セットを指定する目的は、データベースに保存されるデータの文字化けを避けることです。データベースの作成時に文字セットを指定しない場合は、システムのデフォルトの文字セットが使用されます。
  • [DEFAULT] COLLATE: 文字セットのデフォルトの照合規則を指定します。

MySQL の文字セット (CHARACTER) と照合規則 (COLLATION) は 2 つの異なる概念です。文字セットは MySQL が文字列を格納する方法を定義するために使用され、照合規則は文字列を比較する方法を定義します。MySQL の文字セットと照合規則については後ほど個別に説明します。

mysql の ENGINE = innodb は、ストレージ エンジンが innodb であることを意味します。innoDB は、外部キー制約を提供する MySQL 上の最初のデータ ストレージエンジンです。トランザクション処理の提供に加えて、InnoDB は行ロックもサポートし、Oracleと同じ一貫したロックなしの読み取りを提供します。これにより、同時読み取りユーザーの数が増加し、パフォーマンスが向上します。ロックの数を増やさずにパフォーマンスを向上させます。InnoDB は、大量のデータを処理する際のパフォーマンスを最大化するように設計されており、そのCPU使用率は他のすべてのディスクベースのリレーショナル データベース エンジンの中で最も効率的です。

 b. application.properties 構成ファイルを変更します。

D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes ディレクトリに入り、application.properties ファイルを見つけます。

ハードコードされた認証ユーザーをコメントアウトします。

プラス jdbc データ ソース構成

cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/db_sso?serverTimezone=GMT

cas.authn.jdbc.query[0].user=root

cas.authn.jdbc.query[0].password=123456

cas.authn.jdbc.query[0].sql=select * from t_cas where username=?

cas.authn.jdbc.query[0].fieldPassword=password

cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver

 c. jdbc ドライバー パッケージを追加し、jar をサポートします

以前にダウンロードした jar パッケージを D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\lib ディレクトリにコピーします。

 d.テスト

bin ディレクトリに入り、startup.bat を起動します。

ログインページにアクセスしてログインすると、認証に失敗しましたデータベース接続に問題がある可能性があり、解決方法がわかりません。

5. CASクライアント+SpringBootクライアントの統合と構築

 注: パッケージ com.java1234 は crm_sys モジュールの下の java ディレクトリに作成する必要があります。これは、ステップ 3 の最後で構成したドメイン名と一致している必要があります。

cas はデフォルトで https サービスをサポートし、http サービスをサポートしていないため、今プロジェクトを実行して http://localhost:9999 にアクセスすると、認証されていないサービス エラーが表示されます。

ここで http サービスを構成し、D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\services ディレクトリに入り、HTTPSandIMAPS を開きます。 10000001.json ファイルに、以下に示すように |http を追加します。

次に、前のパス D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes に戻り、application.properties ファイルを開き、ファイルの最後に次のコードを追加します。

cas.tgc.secure=false

cas.serviceRegistry.initFromJson=true

 次に、bin ディレクトリに入ってstartup.batを起動し、http://localhost:9999にアクセスすると、ログインページに自動的にジャンプすることがわかります。

ユーザー名とパスワードを入力して、対応するシステム インターフェイスに入ります。

シングル サインオンをより適切に検証するために、さらにいくつかのモジュールを作成できます。

 テストページのコードは次のとおりです。

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires" content="0">
    <title>SSO单点登录系统 Powered by java1234.vip</title>
</head>
<body>
SSO单点登录系统 Powered by java1234.vip<br/>
<a href="http://java1234.com:6666/crm" target="_blank">crm客户关系管理系统</a><br/>
<a href="http://java1234.com:8888/fd" target="_blank">fd财务管理系统系统</a><br/>
<a href="http://java1234.com:9999/hr" target="_blank">hr人力资源管理系统</a><br/>
</body>

テスト ページは次の図に示すようになります。

テスト後、シングル サインインとログアウトは正常に行われます。

ログインしていない場合、クリックしていずれかのシステムに入ると、ログイン検証のために cas シングル サインオン インターフェイスにジャンプします。成功した後、他のシステムに入るには検証は必要ありません。ログアウト後、他のシステムも同時にログアウトします。

 6. CASサーバーインターフェースの変更

D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes ディレクトリに入り、layout.html ファイルを開き、ヘッダーをコメントアウトします。そしてフッター。

 次に、bin ディレクトリにあるstartup.bat ファイルを再起動します。実行結果は図に示すようになります。ヘッダーとフッターは削除されています。

次に、図に示すように、casLoginView.html ファイル内のその部分をコメント化します。

 実行結果は次のとおりです。

 次のコードを D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\static\css\cas.css ファイルに追加します。

#notices .rightimg{
  width: 500px;
  height: 440px;
  background-image: url(D:\CAS\apache-tomcat-9.0.76-windows-x64\apache-tomcat-9.0.76\webapps\cas\WEB-INF\classes\static\images\login-img.png);
}

次のコード行を casLoginView.html ファイル アイコンに追加します。

startup.bat を起動した場合の実行効果は次の図に示すようになります。

 

おすすめ

転載: blog.csdn.net/weixin_54106682/article/details/131231339