Fuse 6 is no longer supported
As of February 2025, Red Hat Fuse 6 is no longer supported. If you are using Fuse 6, please upgrade to Red Hat build of Apache Camel.第148章 Shiro セキュリティー
Shiro セキュリティーコンポーネント リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.5 で利用可能
Camel の shiro-security コンポーネントは、Apache Shiro セキュリティープロジェクトをベースとしたセキュリティーに焦点を当てたコンポーネントです。
Apache Shiro は、認証、承認、エンタープライズセッション管理、および暗号化を適切に処理する強力かつ柔軟なオープンソースセキュリティーフレームワークです。Apache Shiro プロジェクトの目的は、利用可能な最も堅牢で包括的なアプリケーションセキュリティーフレームワークを提供しながら、非常に簡単に理解でき、非常に簡単です。
この camel の shiro-security コンポーネントにより、認証および承認サポートを Camel ルートの異なるセグメントに適用できます。
Shiro セキュリティーは、Camel ポリシーを使用してルートに適用されます。Camel の Policy は、Camel プロセッサーにインターセプターを適用するストラテジーパターンを使用します。camel ルートのセクション/セグメントに、セキュリティー、トランザクションなどの相互の懸念(セキュリティー、トランザクションなど)を適用する機能を提供します。
Maven ユーザーは、このコンポーネントの
pom.xml
に以下の依存関係を追加する必要があります。
Shiro セキュリティーの基本 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
camel ルートで Shiro セキュリティーを使用するには、セキュリティー設定の詳細(ユーザー、パスワード、ロールなど)を使用して ShiroSecurityPolicy オブジェクトをインスタンス化する必要があります。その後、このオブジェクトは Camel ルートに適用する必要があります。この ShiroSecurityPolicy オブジェクトは、Camel レジストリー(JNDI または ApplicationContextRegistry)に登録してから、Camel Context の他のルートでも使用することができます。
設定の詳細は、Ini ファイル(プロパティーファイル)または Ini オブジェクトを使用して ShiroSecurityPolicy に提供されます。Ini ファイルは、以下のようにユーザー/ロールの詳細を含む標準の Shiro 設定ファイルです。
ShiroSecurityPolicy オブジェクトのインスタンス化 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ShiroSecurityPolicy オブジェクトは以下のようにインスタンス化されます。
ShiroSecurityPolicy Options リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
名前 | デフォルト値 | 型 | 説明 |
---|---|---|---|
iniResourcePath または ini
|
none
|
リソース文字列または Ini オブジェクト | iniResourcePath または Ini オブジェクトのインスタンスの必須の Resource String をセキュリティーポリシーに渡す必要があります。"file:, classpath:, url:" で始まる場合は、ファイルシステム、クラスパス、または URL からそれぞれリソースを取得できます。例:"classpath:shiro.ini" |
passPhrase
|
AES 128 ベースのキー
|
byte[] | メッセージエクスチェンジとともに送信される ShiroSecurityToken (s)を復号化する passPhrase |
alwaysReauthenticate
|
true
|
boolean | を設定して、個々のリクエストで再認証できるようにします。false に設定すると、ユーザーは認証され、今後実行する同じユーザーからの要求のみではなく認証およびロックされます。 |
permissionsList
|
none
|
List<Permission> | 認証されたユーザーが追加のアクションを実行できるようにするために必要なパーミッションのリスト。つまり、ルートでさらに続行されます。ShiroSecurityPolicy オブジェクトに Permissions リストが提供されていない場合、承認は不要であると判断されます。 |
cipherService
|
AES
|
org.apache.shiro.crypto.CipherService | Shiro には AES および Blowfish ベースの CipherServices が同梱されています。これらは 1 つ使用することも、独自の暗号実装で渡すこともできます。 |
base64
|
false
|
boolean
|
Camel 2.12: セキュリティートークンヘッダーに base64 エンコーディングを使用します。これにより、JMS でのヘッダーの転送が可能になります。このオプションは ShiroSecurityTokenInjector でも設定する必要があります。
|
Camel ルートでの Shiro 認証の適用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ShiroSecurityPolicy は、メッセージヘッダーに暗号化された SecurityToken を含む受信メッセージエクスチェンジをテストおよび許可し、さらに適切な認証を続行します。SecurityToken オブジェクトには、ユーザーが有効なユーザーである場所を決定するために使用される Username/Password の詳細が含まれます。
Camel ルートでの Shiro 承認の適用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
パーミッションリストを ShiroSecurityPolicy に関連付けることで、承認を Camel ルートに適用できます。Permissions List は、ユーザーがルートセグメントの実行に進むために必要なパーミッションを指定します。ユーザーに適切なパーミッションが設定されていない場合、リクエストはこれ以上続行できません。
ShiroSecurityToken を作成し、メッセージエクスチェンジに注入する リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ShiroSecurityToken オブジェクトは、ShiroSecurityTokenInjector と呼ばれる Shiro Processor を使用してメッセージエクスチェンジを作成し、挿入することができます。クライアントで ShiroSecurityTokenInjector を使用して ShiroSecurityToken を注入する例を以下に示します。
ShiroSecurityPolicy でセキュリティーが保護されたルートへのメッセージ送信 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
セキュリティーポリシーが適用される Camel ルートとともに送信されるメッセージおよびメッセージエクスチェンジは、Exchange ヘッダーの SecurityToken によって付随する必要があります。SecurityToken は、Username と Password を保持する暗号化されたオブジェクトです。SecurityToken はデフォルトで AES 128 ビットセキュリティーを使用して暗号化され、任意の暗号に変更できます。
以下は、Camel の ProducerTemplate と SecurityToken を使用してリクエストを送信する方法の例になります。
ShiroSecurityPolicy によってセキュリティーが保護されたルートへのメッセージ送信(Camel 2.12 以降により簡単) リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Camel 2.12 以降では、サブジェクトを 2 つの方法で提供できるため、さらに簡単になりました。
ShiroSecurityToken の使用 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
ユーザー名とパスワードが含まれる
org.apache.camel.component.shiro.security.Shiro.security.ShiroSecurityToken タイプのキー ShiroSecurityConstants.
SHIRO_SECURITY_TOKEN
のヘッダーを持つ Camel ルートにメッセージを送信することができます。以下に例を示します。
ShiroSecurityToken shiroSecurityToken = new ShiroSecurityToken("ringo", "starr"); template.sendBodyAndHeader("direct:secureEndpoint", "Beatle Mania", ShiroSecurityConstants.SHIRO_SECURITY_TOKEN, shiroSecurityToken);
ShiroSecurityToken shiroSecurityToken = new ShiroSecurityToken("ringo", "starr");
template.sendBodyAndHeader("direct:secureEndpoint", "Beatle Mania", ShiroSecurityConstants.SHIRO_SECURITY_TOKEN, shiroSecurityToken);
また、以下のように、2 つの異なるヘッダーでユーザー名とパスワードを指定することもできます。
Map<String, Object> headers = new HashMap<String, Object>(); headers.put(ShiroSecurityConstants.SHIRO_SECURITY_USERNAME, "ringo"); headers.put(ShiroSecurityConstants.SHIRO_SECURITY_PASSWORD, "starr"); template.sendBodyAndHeaders("direct:secureEndpoint", "Beatle Mania", headers);
Map<String, Object> headers = new HashMap<String, Object>();
headers.put(ShiroSecurityConstants.SHIRO_SECURITY_USERNAME, "ringo");
headers.put(ShiroSecurityConstants.SHIRO_SECURITY_PASSWORD, "starr");
template.sendBodyAndHeaders("direct:secureEndpoint", "Beatle Mania", headers);
ユーザー名とパスワードヘッダーを使用すると、Camel ルートの ShiroSecurityPolicy がキー ShiroSecurityConstants.SHIRO_SECURITY_TOKEN を持つ単一のヘッダーに自動的に変換されます。次に、トークンは base64 表現の
ShiroSecurityToken
インスタンスです(後者は base64=true を設定する場合です)。