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

Java API開発における認証にShiroを使用する

WBOY
リリース: 2023-06-18 11:20:16
オリジナル
1943 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート