- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我是 Spring 和 Shiro 平台的新手。
我有两个网址集 /admin/--
和 /vendor/--
。两个客户端集都使用特定领域进行身份验证。我扩展了 ModularRealmAuthenticator
类来选择正确的领域进行身份验证。
ModularRealmAuthenticator.java
@Override
protected AuthenticationInfo doAuthenticate(AuthenticationToken authenticationToken) throws AuthenticationException {
assertRealmsConfigured();
MultiLoginAuthenticationToken mlat = null;
Realm loginRealm = null;
if (!(authenticationToken instanceof MultiLoginAuthenticationToken)) {
throw new AuthenticationException("Unrecognized token , not a typeof MultiLoginAuthenticationToken ");
} else {
mlat = (MultiLoginAuthenticationToken) authenticationToken;
logger.debug("realm name is : {}", mlat.getRealmName());
loginRealm = lookupRealm(mlat.getRealmName());
}
return doSingleRealmAuthentication(loginRealm, mlat);
}
protected Realm lookupRealm(String realmName) throws AuthenticationException {
Collection<Realm> realms = getRealms();
for (Realm realm : realms) {
if (realm.getName().equalsIgnoreCase(realmName)) {
logger.debug("look up realm name is : {}", realm.getName());
return realm;
}
}
throw new AuthenticationException("No realm configured for Client " + realmName);
}
但是,当我将来自不同数据源集的角色和权限分配给两个客户端(管理员和供应商)时。它按照我在 applicationContext.xml 文件中定义的顺序迭代领域。
我的ApplicationContext.xml
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="authenticator">
<bean class="com.yatra.mp.security.MultiLoginAuthenticator"/>
</property>
<!-- Single realm app (realm configured next, below). If you have multiple
realms, use the 'realms' property instead. -->
<property name="realms">
<util:list>
<ref bean="adminAuthRealm" />
<ref bean="vendorAuthRealm" />
</util:list>
</property>
<property name="cacheManager" ref="cacheManager" />
</bean>
这两个领域都扩展了 AuthorizingRealm 类,并且都有 doGetAuthorizationInfo 和 doGetAuthenticationInfo 方法。我在其中定义了我的自定义实现。
是否有必要扩展ModularRealmAuthorizer类?如果是,您能告诉我我覆盖了哪个方法吗?
最佳答案
您可以做的是将域信息添加到您可以包装在 AuthenticationInfo 中的PrincipalCollection。它是主体集合中添加的 token ,会在后续的 shiro 调用中继承。如果它与您的领域不匹配,您可以在身份验证中使用该信息来跳过。这实际上是我们在自定义领域中所做的事情:
public class OurRealmImpl extends AuthorizingRealm
...
@Override
public AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) {
... //check if user exists and read passwordhash
Login ourLoginToken = ...
SimplePrincipalCollection principalCollection = new SimplePrincipalCollection(ourLoginToken, realmName);
return new SimpleAuthenticationInfo(principalCollection, passwordHash);
}
@Override
public AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
Collection collection = principals.fromRealm(realmName);
if (collection.isEmpty()) {
return null;
}
Login login = (Login) collection.iterator().next();
... get the rights and return authorization
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
info.addStringPermissions(permissionStrings);
return info;
}
关于java - Shiro中如何从多个领域中获取特定领域进行授权?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24576987/
我已经一遍又一遍地讨论如何让用户登录 Shiro,但似乎仍然缺少一个重要的部分:shiro 如何根据存储的用户名和密码验证给定的用户名和密码?我想到的最多的是 It is each Realm's r
Apache Shiro 文档暗示了一些用于捕获连续失败登录尝试(以及其他)的所需功能,但是,我找不到具体的文档。目前我可以执行 currentUser.login(token);使用无效密码无限次并
我想在下一个Web项目中使用Shiro,但是我不知道一种好的(如果不是最好的)策略来管理用户(shiro.ini中的[users])。 最好为每个注册成员创建Shiro用户吗? 还是创建一个Shiro
我有一个简单的网络项目。我想在这个项目中访问多个角色是一个 URL。 网址的 sihor.ini 部分 [urls] /login.xhtml = authc /logout = logout /ad
我正在使用 apache shiro。当我想知道用户是否有权限和角色时,我使用 SecutiryUtils.getSubject()。我想知道如何向主题添加更多信息,例如电子邮件、主键和我需要的任何其
1、Shiro认证过程 1、收集实体/凭据信息 复制代码 代码如下: //Example using most common scenario of usern
我正在尝试使用 Shiro 对 Tomcat 6 中运行的 servlet 进行身份验证。 我有以下 shiro.ini 文件: [main] ps = org.apache.shiro.authc.
Apache Shiro的配置主要分为四部分: 对象和属性的定义与配置 URL的过滤器配置 静态用户配置 静态角色配置 其中,由于用户、角色一般由后台进行操作的动态数据,因此Shiro配置一般仅包
我正在使用 Spring MVC、Tiles 和 Shiro。 这是我的未授权Url 属性的配置方式: 我的期望是,当 MyAuthorizingRealm发现无效凭据,Shiro 将重定向到 /un
我正在使用 Apache Shiro 开发基于 EJB 的网络服务来管理用户访问权限。我添加了 freshly released我的 Maven 项目的 Apache Shiro 1.5.0 版使用新
我正在将现有应用程序从Grails 2.4.4升级到Grails 3.2.8。我正在尝试从grails shiro插件迁移到grails spring-security-shiro插件。除了访问已登录
我正在将我的应用程序从grails 2.4.4迁移到grails 3.2.9。 我正在尝试迁移到 compile 'org.grails.plugins:spring-security-shiro:3
在我包含 shiro-core-1.2.2 和 shiro-web-1.2.2 之前,我的 Maven Web 项目工作正常但是当我在 pom.xml 中包含此依赖项之后,我在执行时收到错误mvn t
我将 Apache Shiro 与 Spring 一起使用,并且仅使用 Spring 的 Java 配置。 (没有 XML)。下面是我的配置类的一部分: @Configuration public c
我能够使用 shiro.ini 和 spring 运行 shiro,但我想使用 shiro 注释,所以我尝试在没有 ini 文件的情况下使用 shiro-spring。但这让我很难受错误: org.a
1. 权限管理 1.1 什么是权限管理? 权限管理实现对用户访问系统的控制,按照安全规则或者安全策略,可以控制用户只能访问自己被授权的资源 权限管理包括用户身份认证和授权两部分,简称认证授权 1.2
我们经常会有用到,当A 用户在北京登录 ,然后A用户在天津再登录 ,要踢出北京登录的状态。如果用户在北京重新登录,那么又要踢出天津的用户,这样反复。 这样保证了一个帐号只能同时一个人使用。那么下面
有没有办法在 Shiro 中实现多因素身份验证?有人可以给我一个关于如何实现这一点的提示吗? 更多细节: 基本思想是,用户需要像往常一样使用用户名和密码登录,但在实际验证之前,用户还需要输入他作为 S
ini 文件就像 [main] authc.loginUrl = /login.html authc.successUrl = /index.html authc.usernameParam = j_
我了解 spring jsf 和 hibernate。我已经整合了它们并创建了我自己的框架。现在我想使用 Apache Shiro 将 session 管理添加到我的框架中。但我对 Apache Sh
我是一名优秀的程序员,十分优秀!