我在我的 shiro 安全保护 java 应用程序中使用了两个领域。一个支持我的 OAuthToken,另一个支持 UsernamePasswordToken。现在,当我的用户使用 OAuthToken 进行身份验证时,我的 OAuthRealm 的 doGetAuthenticationInfo 方法被调用,但我的PasswordRealm的 doGetAuthorizationInfo被调用,谁能告诉我,为什么?
亲切的问候克里斯
我在我的 shiro 安全保护 java 应用程序中使用了两个领域。一个支持我的 OAuthToken,另一个支持 UsernamePasswordToken。现在,当我的用户使用 OAuthToken 进行身份验证时,我的 OAuthRealm 的 doGetAuthenticationInfo 方法被调用,但我的PasswordRealm的 doGetAuthorizationInfo被调用,谁能告诉我,为什么?
亲切的问候克里斯
尝试在您的领域中覆盖方法isPermitted()。Shiro 使用此方法检查每个声明的领域,是否允许当前领域授权用户。您可以以某种方式实现此方法:
/**
* {@inheritDoc}
*/
@Override
public boolean isPermitted(PrincipalCollection principals, String permission) {
if (principals.fromRealm("realm name").isEmpty()) {
return false;
}
else {
return super.isPermitted(principals, permission);
}
}