Apache Shiro(v1.2.3)を使用していて、ユーザー名とパスワードの認証が正しく設定されていて、動作しています(リモートデータベースにパスワードのハッシュと塩を保存しています)。私は今、役割を使って権限を設定しようとしています。私にはAuthorizingRealm
を拡張する単一の領域があります。Apache Shiroの役割と権限が動作しない
public class MyRealm extends AuthorizingRealm {
@Override
protected AuthenticationInfo doGetAuthenticationInfo(
AuthenticationToken token) throws AuthenticationException {
// no problems here...
}
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principles) {
Set<String> roles = // get the roles for this user from the DB
LOG.info("Found roles => " + roles.toString());
return new SimpleAuthorizationInfo(roles);
}
}
私shiro.ini
は、次のようになります。
[メイン]
MYREALM = ie.enki.closing.users.MyRealmcredentialsMatcher = org.apache.shiro.authc。 credential.Sha256CredentialsMatcher
credentialsMatcher.storedCredentialsHexEncoded = false
credentialsMatcher.hashIterations = 1024myRealm.credentialsMatcher = $ credentialsMatcher
のCacheManager = org.ehcache.integrations.shiro.EhcacheShiroManager
securityManager.cacheManager = $のCacheManager = *
スタッフ[役割]
管理者= resource_1:action_1
ehcacheがbeinであることを関連する起動ログに記録します。それがない前にグラムの設定が正しくけど、それはまた、この言及:
[メイン] INFO org.apache.shiro.realm.text.IniRealm - IniRealm定義され、 が、定義された[ユーザー]セクションがありません。この領域にはどのユーザーも入力されず、 が入力され、プログラムによって入力されます。このRealmインスタンスが になるようにユーザを定義する必要があります。
[main] INFO org.apache.shiro.realm.AuthorizingRealm - キャッシュなし またはcacheManagerプロパティが設定されています。認証キャッシュは を取得できません。
は...
一部にehcacheセットアップログ...私のテストで
、私のログは私がadmin
役割を持っていることを述べているにもかかわらずcurrentUser.isPermitted("resource_1:action_1")
戻りfalse
は(私もstaff
役割でそれを試してみました)。
ドキュメントは次のようにユーザにロールをshiro.ini
の[ユーザー]セクションを設定し、割り当ての話四郎:
[ユーザー]
some_user =パスワード、ROLE1、ROLE2
...しかし、私はユーザーとそのパスワードをiniファイルに定義したくありません。それが私のデータベースです。私は設定で何かを誤解しましたか?
ドキュメントをもう一度読み終えたら、[users]セクションを使用して少数の静的ユーザーを定義している場合にのみ、[roles]セクションが適用されるようです。そうであれば、データベースに定義されているユーザーの権限にロールをどのように関連付けるのですか。 docs that might reveal this infoは不完全です。