Shiro @ RequiresPermissionsのしくみ

ブログ投稿を参照してください:https//blog.csdn.net/medelia/article/details/86692521

最近、SpringBootプロジェクトのセキュリティ戦略は、より人気のあるshiroフレームワークを使用することです。これは私が行った最初のspringBootプロジェクトであり、shiroを使用するのも初めてです。

あまりナンセンスではありませんが、フレームワークは会社の上司によって設計されました。

ここに画像の説明を挿入

 ビューログメソッドにRequiresPermissionsを追加しました。次に、ユーザーがsys:log:content文字列を持っている場合にのみ、このメソッドにアクセスできます。
では、ユーザーがこの文字列を所有していることをどのようにして知ることができますか?

自分でメソッドを定義する必要があります

ここに画像の説明を挿入

 

抽象メソッドorg.apache.shiro.realm.AuthorizingRealmを継承して、その抽象クラスdoGetAuthorizationInfoメソッドを実装します。このようにして、フレームワークはユーザー権限のリストを取得します。

然后在org.apache.shiro.realm.AuthorizingRealm

ここに画像の説明を挿入

この方法を見つけることは、shiro権限検証の中核であることを意味します。containsAllの学習と使用に注意してください。https//blog.csdn.net/baidu_15113429/article/details/53198625を参照してください。

 ここに画像の説明を挿入

 

このコードは、思考は本当に私が考えることができるものではないと感じています。非常に単純に見えますが、興味があれば、デバッグしてフォローすることができます。

さらに、shiroは通常、ログイン認証(Authentication)と承認検証(Authorization)を使用します。2つの単語は非常に似ています。ログイン認証はauthcと省略され、承認検証はauthzと省略されます。

補足:ソースコードはメソッドの@RequiresPermissions( "")アノテーションのアクセス許可を分割するため、次を含むアクセス許可は分割されてset <String>コレクションが生成されます。したがって、containsAll()が実行されると、ユーザーには権限がありますa:b権限はありませんが、呼び出されたメソッドの上の@RequiresPermissions( "a:b")はこのメソッドに転送されます。このメソッドは、a:b権限がある場合にのみ呼び出します。したがって、:の代わりに、の形式を使用します。権限の一意のコード値を記述します。

 if (!part.contains(WILDCARD_TOKEN) && !part.containsAll(otherPart)) {
                    return false;
                }

2:さらに、orとandの使用を追加します。

// index:helloパーミッション要件に準拠
@ RequiredPermissions ( "index:hello")
 
// index:helloとindex:worldパーミッション要件を同時にチェックする必要があります
@ RequiredPermissions ({"index:hello"、 "index: world "})
 
// index:helloまたはindex:worldのアクセス許可要件を満たす
@RequiresPermissions(value = {" index:hello "、" index:world "}、logical = Logical.OR)

 

おすすめ

転載: blog.csdn.net/zhangleiyes123/article/details/109044198