SpringBoot 整合 Shiro thymeleaf _01_Shiro概念

Shiroの紹介と機能の説明

ShiroはJavaのセキュリティフレームワークです。現在のところ、Apache Shiroはシンプルであるため、利用する人が増えています。SpringSecurityと比較すると、Spring Securityほど強力ではないかもしれませんが、実際の作業ではそれほど複雑ではないため、小さくてシンプルなShiroを使用してください。十分です
ここに画像の説明を挿入

認証:認証/ログイン、ユーザーが適切なアイデンティティを持っていることを確認ではありません。
認証:認証能力を検証することを、ユーザーが権限を認証したことを確認してください。によって判断された
ユーザーは、このような共通として、物事を行うことができるかどうか:ユーザーに役割があることを確認します。またはできめ細かい確認し
、リソースへのユーザーアクセス許可するかどうかを
セッション・マネージャ:終了が存在しない場合に、1つのセッションでユーザがログインした後に、あるセッション管理は、それがすべてだと信じ
セッションの情報を、セッション缶これは一般的なJavaSE環境であるか、Web環境である可能性があります。
暗号化:プレーンテキストストレージではなくデータベースに保存されるパスワード暗号化などのデータのセキュリティを保護する暗号化;
Webサポート:Webサポートは、Web環境に簡単に統合できます。 ;
キャッシング:たとえば、ユーザーがログインした後、キャッシングを行うと、ユーザー情報とロール/権限を毎回確認する必要がないため、効率が向上します。
同時実行性:shiroは、マルチスレッドアプリケーションの同時検証をサポートします。
権限自動的に伝播できるスレッド;
テスト:テストサポートの提供;
実行:1人のユーザーが別のユーザーのIDを装うことを許可します(許可されている場合)。
覚えておいてください:これは非常に一般的な機能です。 、最初のログイン後、次の時間がログイン戻って来ていないしている
ことを覚えています Shiroはユーザーと権限を維持せず、これらは自分で設計/提供する必要があり、
対応するインターフェースを介してShiroに挿入されます。

しろ実現原理理解

ここに画像の説明を挿入
言い換えれば、私たちにとって、最も単純なShiroアプリケーション:
アプリケーションコードはサブジェクトによって認証および承認され、サブジェクトはSecurityManagerに委託されます。SecurityManagerが正当な
ユーザーを取得できるように、レルムをShiroのSecurityManagerに注入する必要があります。その権威による判断。

シロの建築的理解

ここに画像の説明を挿入
件名:件名、件名はアプリケーションと対話できる「ユーザー」であることが
わかります; SecurityManager:SpringMVCのDispatcherServletまたは
Struts2のFilterDispatcherと同等です; Shiroの心臓部です;すべての特定の対話はSecurityManagerによって制御されます;それすべてのサブジェクトを管理し、認証と承認、およびセッションとキャッシュの管理を担当します。
オーセンティケーター:サブジェクト認証を担当するオーセンティケーター。これは拡張ポイントであり、Shiroのデフォルトが適切でないとユーザーが感じた場合は、実装をカスタマイズできます。これには、認証戦略(認証戦略)が必要です。
つまり、ユーザー認証が渡される状況と、Authrizer :オーソライザーまたはアクセスコントローラーは、サブジェクトが対応する操作を実行する権限を持っているかどうかを判断するために使用されます。つまり、ユーザーがアクセスできるアプリケーションの機能を制御します。
レルム:安全なエンティティデータと見なすことができる1つ以上のレルムが存在する可能性がありますセキュリティエンティティを取得するために使用されるソース(JDBC、LDAP、またはメモリなど)、ユーザーによって提供されます。注:Shiroは、ユーザー/権限がどこにどの形式で保存されているかを認識していません。 ;したがって、通常はアプリケーションに独自のレルムを実装する必要があります。
SessionManager:サーブレットを作成している場合は、Sessionの概念を知っている必要があります。Sessionはライフサイクルを管理するために誰かが必要です。このコンポーネントはSessionManagerであり、ShiroはWeb環境だけでなく、通常のJavaSE環境でも使用できます。 EJBと他の環境。これはすべて、Shiroがセッションを抽象化して、本体とアプリケーションの間のデータを管理します。この場合、たとえば、私たちはそれをWeb環境で使用し、元々はWebサーバーでしたが、EJBに到達しました。サーバー。現時点では、2つのサーバーのセッションデータを1か所に配置したいと考えています。現時点では
、独自の分散セッションを実装できます(Memcachedサーバーにデータを配置するなど)
。SessionDAO:全員が使用したDAO、データアクセスオブジェクト、使用たとえば、セッションCRUDの場合、セッションをデータベースに保存する場合は、JDBCなどの独自のSessionDAOを実装してデータベースに書き込むことができます。たとえば、セッションをMemcachedに配置する場合は、独自のMemcached SessionDAOを実装できます。さらに、SessionDAOでキャッシュを使用できます。パフォーマンスを向上させるためのキャッシュ;
CacheMa nager:ユーザー、ロール、権限などのキャッシュを管理するキャッシュコントローラー。これらのデータ
基本的にほとんど変更されないため、キャッシュに配置された後のアクセスパフォーマンスを向上させることができます。
暗号化:暗号モジュール、Shiroパスワード暗号化などの暗号化コンポーネントが使用されます

shiro認証機能(Authentication)の流れ

フローチャート:
ここに画像の説明を挿入

1、UsernamePasswordToken 实现HostAuthenticationToken和RemeberAuthenticationToken,HostAuthenticationToken实现AuthenticationToken
2、首先调用 Subject.login(token)进行登录,其会自动委托给 Security Manager,调用之前必
须通过 SecurityUtils. setSecurityManager()设置;
3、SecurityManager 负责真正的身份验证逻辑;它会委托给 Authenticator 进行身份验证;SecurityManager j接口继承Authenticator、Authrizer、sessionManage接口
4、Authenticator 才是真正的身份验证者,Shiro API 中核心的身份认证入口点,此处可以自
定义插入自己的实现;
5、Authenticator 可能会委托给相应的 AuthenticationStrategy 进行多 Realm 身份验证,默认
ModularRealmAuthenticator 会调用 AuthenticationStrategy 进行多 Realm 身份验证;
6、Authenticator 会把相应的 token 传入 Realm,从 Realm 获取身份验证信息,如果没有返
回/抛出异常表示身份验证失败了。此处可以配置多个 Realm,将按照相应的顺序及策略进
行访问。

レルム

通常、AuthorizingRealm(承認)を継承します; AuthenticatingRealm(つまり認証)を継承し、CachingRealm(キャッシュ実装を使用)を間接的に継承して、AuthenticationInfo認証およびdoGetAuthorizationInfo承認メソッドを書き換えます。

shiroインターセプタールール

ここに画像の説明を挿入
ここに画像の説明を挿入

公開された979元の記事 ウォンの賞賛153 ビュー260 000 +

おすすめ

転載: blog.csdn.net/weixin_40816738/article/details/105471577