検索
ホームページJava&#&チュートリアルJava API開発における認証にShiroを使用する

Java 開発では、アプリケーションのセキュリティが非常に重要です。 Shiro は、認証、認可、暗号化、セッション管理などのセキュリティ機能を実装するために使用できる、強力で使いやすい Java セキュリティ フレームワークです。この記事では、Java API開発における認証にShiroを使用する方法を紹介します。

  1. はじめに

Shiro を使用する前に、いくつかの基本的な設定を行う必要があります。 Maven を使用して、Shiro 依存関係を追加できます。プロジェクトの pom.xml に次のコードを追加します。

<dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.7.1</version>
</dependency>
  1. Shiro の基本概念

Shiro を使用する場合、いくつかの基本概念を理解する必要があります。ここでは、いくつかの重要な概念を示します。

認証: 認証は、ユーザーの身元を確認するプロセスです。 Shiro では、ユーザー名とパスワードを使用して認証できます。

承認: 承認は、ユーザーが操作を実行するための十分な権限を持っていることを確認するプロセスです。 Kiri では、ロールとパーミッションを使用して承認を行うことができます。

セッション管理: セッションとは、サーバーとの対話プロセスを指します。これには、要求と応答のプロセス、またはサーバー上の多数の対話プロセスが含まれます。 Shiro は、ユーザー セッションのライフ サイクルを管理するためのセッション管理機能を提供します。

暗号化: 暗号化とは、ユーザーのパスワードおよびその他の機密情報を暗号化することを指します。 Shiro は、ユーザー情報を簡単に暗号化するためのさまざまなハッシュおよび暗号化アルゴリズムを提供します。

  1. Shiro の設定

Shiro を使用する場合は、まず、Shiro のセキュリティ ポリシーを設定する必要があります。これは、Shiro 設定ファイルで次のように設定することで実現できます。

securityManager.realms = $myRealm
securityManager.sessionManager = $sessionManager
sessionManager.globalSessionTimeout = 86400000

上記の設定では、Shiro のセキュリティ ポリシーとして myRealm を使用しています。また、グローバル セッション タイムアウトを 1 日 (24 時間) に設定します。

さらに、AuthenticatingRealm、CredentialsMatcher など、Shiro 構成ファイルで他のコンポーネントも宣言する必要があります。サンプル構成ファイルは次のとおりです。

[main]
# Shiro提供的默认的会话管理器实现
sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
# 自定义的会话DAO,实现了会话保存、更新、删除
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO
securityManager.sessionManager = $sessionManager
securityManager.sessionManager.sessionDAO = $sessionDAO

# 使用自定义的Realm实现
myRealm = com.example.MyRealm
securityManager.realms = $myRealm

# 加密配置
credentialsMatcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
# 密码加密的次数
credentialsMatcher.hashIterations = 1024
myRealm.credentialsMatcher = $credentialsMatcher
  1. ユーザーの認証

Shiro を構成した後、ユーザーを認証するコードの作成を開始できます。ユーザーを認証するには、Shiro によって提供される UsernamePasswordToken オブジェクトを使用できます。以下はサンプル コードです:

// 在应用程序中创建一个SecurityUtils实例
SecurityUtils securityUtils = new SecurityUtils();

// 创建一个Subject对象,表示当前用户的身份
Subject currentUser = securityUtils.getSubject();

// 创建一个UsernamePasswordToken对象,表示用户输入的用户名和密码
UsernamePasswordToken token = new UsernamePasswordToken("username", "password");
try {
    // 调用Subject的login方法进行认证
    currentUser.login(token);
    // 认证成功后,我们可以执行必要的操作,如重定向到受保护的页面
    // ...
} catch (UnknownAccountException | IncorrectCredentialsException e) {
    // 当认证失败时,抛出异常,我们可以根据不同的异常类型做出不同的响应
    // ...
}

上記のコードでは、現在のユーザーの ID を表す Subject オブジェクトを作成します。次に、ユーザーが入力したユーザー名とパスワードを表す UsernamePasswordToken オブジェクトを作成します。最後に、サブジェクトのログイン メソッドを呼び出してユーザーを認証します。ユーザーの認証が失敗した場合、適切な例外がスローされます。ユーザーの認証が成功すると、他の操作を続行できます。

  1. 認可の実装

ユーザーを認証した後、Shiro の認可機能を使用して、ユーザーのシステム リソースへのアクセスを制御できます。承認は、役割と権限を通じて実現できます。以下はサンプル コードです。

// 在应用程序中创建一个SecurityUtils实例
SecurityUtils securityUtils = new SecurityUtils();

// 创建一个Subject对象,表示当前用户的身份
Subject currentUser = securityUtils.getSubject();

// 检查用户是否具有角色
if (currentUser.hasRole("admin")) {
    // 用户具有管理员角色,可以执行管理员特权操作
    // ...
} else {
    // 用户不是管理员,不能执行管理员特权操作
    // ...
}

// 检查用户是否具有权限
if (currentUser.isPermitted("user:read")) {
    // 用户具有读取用户信息的权限,可以查看用户信息
    // ...
} else {
    // 用户没有相应的读取权限,不能查看用户信息
    // ...
}

上記のコードでは、hasRole メソッドを使用して、ユーザーにロールがあるかどうかを判断します。 isPermitted メソッドを使用して、ユーザーに権限があるかどうかを判断します。ユーザーが対応する役割または権限を持っている場合、対応する操作を実行できます。

    #結論
Shiro を認証に使用すると、Java API 開発をより安全にすることができます。 Shiro は、認証、認可、暗号化、およびセッション管理機能を提供します。私たちは、Shiro を使用してユーザーを認証し、ユーザーにシステム リソースへのアクセスを許可し、ユーザー情報を暗号化することができます。 Shiro を使用することで、アプリケーションのセキュリティと信頼性を簡単に向上させることができます。

以上がJava API開発における認証にShiroを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

分散コンピューティングにJavaのRMI(リモートメソッドの呼び出し)を使用するにはどうすればよいですか?分散コンピューティングにJavaのRMI(リモートメソッドの呼び出し)を使用するにはどうすればよいですか?Mar 11, 2025 pm 05:53 PM

この記事では、分散アプリケーションを構築するためのJavaのリモートメソッドの呼び出し(RMI)について説明します。 インターフェイスの定義、実装、レジストリのセットアップ、およびクライアント側の呼び出しを詳述し、ネットワークの問題やセキュリティなどの課題に対処します。

ネットワーク通信にJavaのソケットAPIを使用するにはどうすればよいですか?ネットワーク通信にJavaのソケットAPIを使用するにはどうすればよいですか?Mar 11, 2025 pm 05:53 PM

この記事では、ネットワーク通信のためのJavaのソケットAPI、クライアントサーバーのセットアップ、データ処理、リソース管理、エラー処理、セキュリティなどの重要な考慮事項をカバーしています。 また、パフォーマンスの最適化手法も調査します

Javaでカスタムネットワークプロトコルを作成するにはどうすればよいですか?Javaでカスタムネットワークプロトコルを作成するにはどうすればよいですか?Mar 11, 2025 pm 05:52 PM

この記事では、カスタムJavaネットワーキングプロトコルの作成を詳述しています。 プロトコルの定義(データ構造、フレーミング、エラー処理、バージョン化)、実装(ソケットを使用)、データシリアル化、およびベストプラクティス(効率、セキュリティ、メンテナ

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい